欢迎来到Ceacer 网安,今天带来的是一个搜索引擎和并带有网络爬虫介绍
Doogle 是一个搜索引擎和网络爬虫,可以搜索索引的网站和图像,然后使用关键字进行搜索。
主要用 OOP 风格的 PHP 编写,旨在更好地理解 OOP 以及网络爬虫的工作原理。
演示网站:https://www.70m.top
下载地址:https://zip.cenet.top/v3/doogle-main.zip
特征
搜索网站
显示标题、URL 和描述
搜索图片
将鼠标悬停在图像上可预览说明(alt 标签)
搜索图像的砖石布局
使用 Fancybox 预览图像
图片搜索页面动态响应
干净的主页
过滤损坏的图像结果
按点击/访问整理搜索结果
搜索页面底部的分页系统
显示搜索词的“找到的结果”
支持非拉丁字符 (UTF-8)
设置和使用
Docker 配置文件可在doogle-docker获取。
假设您已经安装并配置了Docker v3.9(或更高版本)。
git clone https://github.com/safesploit/doogle-docker.git cd doogle-docker sh build.sh
现在可以通过localhost:8000访问 Doogle 。
为了调试, phpMyAdmin 也包含在localhost:8001上。
抓取网站以填充图像和站点表
基于表单的抓取
在浏览器中转到文件所在的位置http://localhost/crawl.php
将 URL 粘贴到输入字段中,然后按“抓取”按钮。
手动抓取
在crawl-manual.php的底部,变量$startUrl是粘贴要抓取的网站URL的位置:
$startUrl = "https://thehackernews.com/";
然后在浏览器中转到文件所在的位置http://localhost/crawl-manual.php
解释
抓取过程需要一些时间,这完全取决于被抓取网站的大小。该页面将继续加载(没有输出),直到crawl.php
脚本完成。
检查表images
和sites
数据库以确保它们已被填充。
一旦表格填充完毕,请访问 Doogle 主页并进行搜索!查看预览图像。
编程逻辑
分页系统逻辑
在search.php内部,实现了分页
在上面的示例中,currentPage=11。显示的页数始终为 10。
每页结果
站点搜索将每页返回 20 个结果,图像搜索将每页返回 30 个结果。
每页的结果可以分别在 search.php 中的第 {83, 88} 行进行更改。如 $pageSize 变量所示:
处理边缘情况
当没有更多页面可用时,可能会出现边缘情况。
因此,对于 331 个结果,将有17 个页面可用。然而,如果不考虑边缘情况,分页系统的 UI 将允许滚动浏览不存在的页面;这将返回一个空结果。
为了处理边缘情况,在 while 循环中实现以下逻辑:
if($currentPage + $pagesLeft > $numPages + 1) $currentPage = $numPages + 1 - $pagesLeft; while($pagesLeft != 0 && $currentPage <= $numPages) { ... }
图片搜索
图片说明
为了使图像搜索提供更多信息,“alt”标签是搜索词的一部分。如./classes/ImageResultsProvider.php第34行所示
使用 JavaScript 加载图像
在“图像”表中,有一行“已损坏”,用于跟踪返回错误的图像。
由于图像已经通过纯服务器端解决方案加载,因此必须利用 AJAX 动态加载图像。显示在 ./assets/js/script.js 中
石工
图像搜索使用Masonry-Cascading 网格布局库。
Masonry 允许图像采用网格布局,该布局由于 jQuery 而具有响应性。下图显示了布局示例:
网站搜索 - 修剪结果
如预览图像所示,Doogle 在执行站点搜索时将为每个结果返回(标题、URL 和描述)。
然而,为了使某些结果更易于阅读,需要执行修剪过程。在 ./classes/SiteResultsProvider.php 中调用函数 trimField() :
标题被削减为 55 个字符,描述被削减为 230 个字符。
遥测
数据库中的“images”和“sites”表都有一行,每一列都包含“clicks”。
每次访问网站或预览图像时,“点击次数”字段都会增加。
执行搜索时,返回的结果按点击次数的降序排列。此行为由 ./classes/SiteResultsProvider.php 函数 getResultsHtml() 内的 $query 显示。参见第 43 行。
用户代理
爬行期间使用的用户代理数据位于 ./classes/DomDocumentParser.php 内部。如第 9 行所示:
预览图像
Doogle 搜索 - 站点
Doogle 搜索 - 图片
图像预览
图像预览是使用 Fancybox 完成的。
标题、图像 URL 和站点 URL 位于左下角。
分页系统
当然,某些搜索词可能会返回许多结果,例如“bbc”。
Doogle每页仅显示20 个站点。在页面底部,我们可以查看接下来的 10 页。
结果显示
页面底部
第 13 页底部
doogleBot 抓取表单
用于提交 URL 进行爬行的 HTML 表单
评论留言