信息检索复习(10)——Web搜索
2018-06-27 本文已影响0人
Eylen
-
Web搜索结构
-
采集器(爬虫)必须提供的功能特点
- 鲁棒性
Web中有些服务器会制造采集器陷阱,这些陷阱实际上是web页面的生成器,它能在某个域下生成无数网页,从而使采集器陷入到一个无线的采集循环中去。采集器必须要能从这类陷阱中跳出来。当然,这些陷阱不一定是恶意的,有时可能是网页设计疏忽导致的。 - 礼貌性
Web服务器具有一些隐式或显式的政策来控制采集器访问它们的频率。设计采集器时必须要遵守这些代表礼貌性的访问策略。(遵守robots.txt ,只访问允许的网站)
- 鲁棒性
-
采集器应该提供的功能特点
- 分布式
- (规模)可扩展性
- 性能和效率
- 质量
- 新鲜度
- (功能)可扩展性
-
采集器的架构
- 待采集URL池
- DNS解析模块
- 抓取模块
- 分析模块
- URL 去重模块
-
URL采集池
- 支持优先级处理并遵循礼貌性访问原则
- 两个主要子模块:F个前端队列集合,B个后端队列集合
- 满足先进先出原则
- 前端队列主要实现优先级访问功能,而后端队列实现礼貌性访问功能
- 首先,优先级分配器会基于URL的抓取历史赋给该URL一个整数i表示其优先级,其中i的取值在1到F之间。比如给一篇变化更频繁的文档分配更高的优先级。
B个后端队列中的每个队列维持下列固定情况:(1)当采集正在进行时,队列不会为空(2)队列只包含来自单个主机的URL。使用一个辅助表T来维护从主机到后端队列的映射。当某个后端队列为空并从前端队列重新填充时,T必须进行相应的更新。
维护一个堆队列,其中的每个元素对应一个后端队列,元素值为该队列对应的主机重新访问的最早时间te。
某个采集线程在请求URL池的一个URL时,会从上述堆中取出其根节点,并且等待相应时间te。然后,从根节点对应的后端队列j中取出队列首部的URLu,并指令u的抓取操作。采集u后,条用线程会检查j是否为空。如果为空,则选择一个前端队列并去除该队列的首部URLv。在选择前端队列时会倾向于高优先级队列(通常有一个随机过程来实现),即保证高优先级URL能更快流入到后端队列中。对于URLv,我们会检查在某个后端队列中是否已包含了来自同一主机的URL。如果存在,那么v就会加入该队列中,这样我们就需要重新回到前端队列来寻找另外一个候选URL插入到现在为空的队列j中。该过程不断继续指导j不再空。任何情况下,对队列j,线程都会基于其中上次采集的URL属性在队中插入一个新的最早访问时间te。
-
Web网页的重复问题
- 检测重复最简单的方法:为每个网页计算出一个指纹,它是整个网页文本的一个很精炼的摘要。
- 对于Web的近似重复的现象:搭叠技术(shingling)