大站优先策略
以网站为单位来衡量网页重要性,对于待抓取URL队列中的网页,根据所属网站归类,如果哪个网站等待下载的页面最多,则优先下载这些链接,也即倾向于优先下载大型网站。
网页更新策略
爬虫需要保证本地下载的网页和原网页的一致性,网页更新策略的任务是要决定合适重新抓取之前已经下载过的网页,以尽可能使本地下载网页和互联网原始页面内容保持一致。
通常采用的方法有:历史参考策略、用户体验策略和聚类抽样策略。
历史参考策略
倾向于认为,过去频繁更新的网页将来也会频繁更新,通过参考其历史,利用泊松过程来对网页变化进行建模,根据每个网页过去的变动情况,预测将来核实内容会再次发生变化。
用户体验策略
一般来讲,对于搜索结果,用户往往只查看前三页,所以对于影响越厉害的网页,我们应该优先调度重新抓取。
聚类抽样策略
聚类抽样策略给出了在网页没有历史信息的情况下,网页更新的策略。聚类抽样策略认为,网页具有一些属性,根据这些属性可以预测其更新周期,具有相似性的网页,其更新周期也是类似的。
所以我们对网页进行聚类,以同一类别内采样网页的更新频率作为类别内所有其他网页的更新周期。
暗网抓取
所谓暗网,就是目前搜索引擎爬虫按照常规方式很难抓取到的互联网页面,即很难有显式的链接指向。比如数据库内的记录,往往是服务器提供查询页面,只有用户按照需求输入查询之后,才可能获得相关数据。
查询组合问题
比如垂直搜索网站往往会给用户提供多个查询输入框,用于输入各种属性来筛选结果。对于暗网爬虫,一个简单粗暴的方式就将所有可能的输入值排列组合。但是很多组合是无效的,也会对被访问网站造成巨大的流量压力。
Google提出了富含信息查询模板(Informative Query Templates)技术,其基本思路是,对于某个固定的查询模板来说,如果给模板内每个属性都赋值,形成不同的查询组合,观察返回结果,如果相互之间内容差异较大,则这个查询模板就是富含信息的查询模板。
这样做是为了防止多次查询的返回结果重复内容太多,导致效率低下。
Google的技术方案采用了ISIT算法,ISIT算法与《浅谈机器学习基础》中讲过的Apriori算法相似:首先从一维模板开始,对一维查询模板逐个考察,去掉不富含信息的查询模板,然后将剩下的一维模板扩展到二维,再依次考察对应的二维模板,如此类推。
这样就可以找到绝大多数富含信息的查询模板,同时也尽可能减少了提交的查询总数。
文本框填写问题
我们往往需要人工提供一些提示,爬虫根据初始种子词表,向垂直搜索引擎提交查询,并下载返回的结果页面,然后从返回结果页面里自动挖掘出相关的关键词,并形成一个新的查询列表,如此循环往复。
分布式爬虫
面对海量待抓取网页,只有采取分布式架构,才有可能在较短时间内完成一轮抓取工作。
大型分布式爬虫分为三个层级:分布式数据中心,分布式抓取服务器和分布式爬虫程序。整个爬虫系统由全球多个分布式数据中心共同构成,每个数据中心又由多台高速网络连接的抓取服务器构成,每台服务器又可以部署多个爬虫程序。
对于同一数据中心的多台抓取服务器,又主要存在两种不同架构,主从式分布爬虫和对等式分布爬虫。
主从式分布爬虫是有一台专门的服务器提供URL分发服务,其他机器则进行实际的网页下载。这种架构中,URL服务器容易成为整个系统的瓶颈。
而在对等式分布爬虫体系中,服务器之间不存在分工差异,每台服务器承担相同的功能。我们对网址的主域名进行哈希计算,之后按服务器个数取模,来给对应的服务器分配任务。但是这样如果部分服务器宕机,或是要添加新的服务器,致使服务器的个数发生了变化,这样就会导致几乎所有的任务都需要进行重新分配,导致资源极大的浪费。