2.3 网络爬虫工作原理
网络爬虫有多个不同的称谓,如网络探测器、Crawler爬行器、Spider蜘蛛、Robot机器人等,其中网络爬虫或网络蜘蛛的叫法会更形象更生动一些,取意为网页爬取程序像虫子和蜘蛛一样在网络间爬来爬去,从一个网页链接爬到另一个网页链接。世界上第一个网络爬虫是MIT Matthew Gray的World Wide Web Wanderer,Wanderer主要用于追踪互联网发展规模。
网络蜘蛛在工作时,通过种子爬取网页的链接地址来寻找目标网页。随后从网站的1个页面,如首页,开始读取网页的内容和网页中其他网页的链接地址,然后通过这些链接地址继续寻找下一个网页。如此循环,直到所有内容都被抓取完成。
在网络爬虫爬取过程中,为了提高爬取效率,一般采用并行爬取的方式。多个网络爬虫在并行爬取过程中,不重复爬取同一个网页尤为重要,这将极大地提高爬取效率。
常规的做法如图2-2所示。
图2-2
网络爬虫在爬取网页时,搜索引擎会建立两张不同的表,一张表记录已经访问过的网址,另一张表记录没有访问过的网址。当网络爬虫爬取某个外部链接页面URL时,需把该网站的URL下载回来分析,当网络爬虫处理好这个URL后,将该URL存入已经访问过的表中。当另一个网络爬虫从其他网站或页面中又发现了这个URL时,它会在已访问列表中有对比查看有没有该URL的访问记录,如果有,则网络爬虫会自动丢弃该URL,不再访问。
网络爬虫在按照链接爬取网页的过程中,网页之间的关系有点类似于有向图。在有向图的节点遍历过程中,我们可以按照“先深度后广度”的方式遍历,也可以按照“先广度后深度”的方式遍历。同样,在网络爬虫爬取网页的过程中,网络爬虫需要根据一定的策略来爬取网页,一般采用“先深度后广度”的方式。
此外,在网络爬虫爬取网页的过程中,还需要注意网页的收录模式,一般有两种,即增量收集和全量搜集。全量搜集,顾名思义,每次爬取网页都更新全部数据内容。这种模式一般定期展开,因为全量搜集模式的资源开销大、付出成本高、内容更新的时效性不高、网络宽带消耗高,而且更新全量数据所需时间也比较长。
而增量收集可以避免全量收集模式的弊端,这种模式主要用于搜集新网页、搜集更新的网页,删除不存在的页面。当然,相较于全量收集,网络爬虫的系统设计也会复杂一些,但时效性好。
对于网站而言,被各家主流搜索引擎收录是共同的夙愿。因此,网站往往采取一些技术手段告知搜索引擎来抓取内容。一般网站可以通过SiteMap告知搜索引擎网站中可提供抓取的网址,SiteMap的核心作用就是向网络抓取工具提供一些提示信息,以便它们更有效地抓取网站。
SiteMap的最简单实现形式就是XML文件。当然,各家搜索引擎定义的SiteMap不尽相同,如百度SiteMap分为三种格式:txt文本格式、XML格式和SiteMap索引格式。
对网站的维护人员而言,除了SiteMap,还可以结合SEO(Search Engine Optimization,搜索引擎优化)来改善网站的被抓取效果。
综上所述,网络爬虫的工作核心就在于在网页搜集效率、质量和对目标网站的友好程度上。网络爬虫要用最少的资源、最少的时间,搜集尽可能多的高质量网页;同时对目标网站的内容抓取不影响网站的正常运转和使用。
对软件开发人员来说,我们可以基于现有的爬虫框架来实现对网络数据的爬取。Java语言栈的读者可以使用WebMagic、Gecco;Python语言栈的读者可以使用Scrapy;Go语言栈的读者可以使用YiSpider。