找回密码
 加入怎通
查看: 1149|回复: 4

[站长八卦] 网络蜘蛛在搜索引擎中如何设计与实现

[复制链接]
站长小二 发表于 2012-08-24 13:45:12 | 显示全部楼层 |阅读模式
  对于搜索引擎来说,网络蜘蛛是最底层的原料提供者。对网络蜘蛛的需求主要来自索引器。5 p" |8 m; A, m$ ?% r7 e
8 T2 N% `" t: G; x
  索引器一般为全文索引器,它并不能干预网络蜘蛛的行为。因此,网络蜘蛛必须可以自动不停地运行。$ M  C4 H* E- ]9 N+ D: ]
5 c; [: k" c# E9 W& r6 |7 a4 l0 T+ V
  索引器要求网络蜘蛛爬取并保存一定字符集范围内的文本文件。保存形式可以是一个大文件也可以是文件夹或数据库。同时,由于互联网是一个全天候开放的系统,网络上的资源随时都有可能已被更新。网络蜘蛛要尽量做到下载的网页保持最新版本,这样才可以获得有实效性的信息。综上所述,网络蜘蛛的功能可以概括。为以下两点:
2 ?3 O( l4 g7 j$ F: `! ^1 s. A
! _7 c2 S- S: H  (1)不需干预的自动爬取网页;(2)以文本形式保存网页内容,并对其进行定期更URL SeⅣer是对URL队列及其相关操作的一个封装,为工作线程提供无重复的URL。URL senrer在内部维护着多个队列用于存储有状态和优先级的URL,这样来避免URL的重复爬取和实现URL的优先爬取策略。0 ~( ]: |3 |  ?4 }% q6 n
4 V- S/ H( [. K1 D$ v
  页面存储模块的功能比较简单,它为工作线程提供文件存储服务。它将线程请求到的H吼L字符序列存储到本地文件或数据库。线程池是一种线程组织管理方法。由于线程的创建将消耗一定的系统资源,所以为每一个URL创建一个线程并不现实。一个好的解决方法就是使用线程池。线程池只创建一定数量的工作线程在线程池中等待,当有任务时,工作线程便开始运行,否则它们一直等当线程从URL SeⅣer获取到URL后,它将发送一个HrI『I:P请求来获取URL所指向的网页。获取成功后对网页代码进行解析,从中提取更多的URL并发往URL Senrer作为以后继续爬取的目标。
0 f! h2 S3 R: Y. e- L5 G3 m4 |8 b5 ^" i. K& C
  网页被解析完后,将被页面存储模块存储。整个过程及URL在URLSeⅣer中的相应状态如图3所示:网络蜘蛛提供的最终结果是网页。网页被请求、保存到本地后,并不能就置之不理了。假设索引器为一个网页索引之后提取了一个关键字,用户通过搜索这个关键字得到了这个网页的URL,当用户浏览这个URL指向的页面时,如果这个页面已经改变了,那么本次搜索对用户来说就是无效的。用户最终从搜索引擎得到的不是网页,而是指向网页的URL,网页始终保持在它本来所在的Web服务器中。因此,搜索引擎要保证页面库中的网页与Web服务器上的网页一致。
1 X/ S0 D& j5 }2 m0 }! n( o
; F9 e: e' l9 r9 \# s6 R  网络蜘蛛第一次处理一个URL时,会将网页保存到本地,之后定期对其进行重复请求,来检查网页是否是最新的,如果不是则下载。这个请求与第一次请求是有区别的。后面的请求只请求网页的头信息,根据头信息中的最后更改日期字段值来判断网页的状态。- o) ]0 {1 o9 W+ g. m+ `9 M! O

) `* D8 y0 D- ]0 L# Y( o8 y# {
回复

使用道具 举报

bhccn 发表于 2025-11-10 19:45:17 | 显示全部楼层
楼主辛苦了,整理这么多内容,必须点赞收藏
回复 支持 反对

使用道具 举报

展翼—阳阳 发表于 2026-01-05 19:45:21 | 显示全部楼层
刚好遇到类似问题,看完这个帖子心里有底了
回复 支持 反对

使用道具 举报

skdfjs2 发表于 2026-02-25 12:38:17 | 显示全部楼层
学习到了,之前一直没注意过这个点,受教了
回复 支持 反对

使用道具 举报

sj8899 发表于 2026-04-28 05:11:13 | 显示全部楼层
这个思路很新颖,打开了新世界的大门,谢谢分享
回复 支持 反对

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-4-28 12:15 , Processed in 0.183410 second(s), 28 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表