网络爬虫是Spider(或Robots、Crawler)等词的意译,是一种高效的信息抓取工具,它集成了搜索引擎技术,并通过技术手段进行优化,用以从互联网搜索、抓取并保存任何通过HTML(超文本标记语言)进行标准化的网页信息。其作用机理是:发送请求给互联网特定站点,在建立连接后与该站点交互,获取HTML格式的信息,随后转移到下一个站点,并重复以上流程。通过这种自动化的工作机制,将目标数据保存在本地数据中,以供使用。网络爬虫在访问一个超文本链接时,可以从HTML标签中自动获取指向其他网页的地址信息,因而可以自动实现高效、标准化的信息获取。随着互联网在人类经济社会中的应用日益广泛,其所涵盖的信息规模呈指数增长,信息的形式和分布具有多样化、全球化特征,传统搜索引擎技术已经无法满足日益精细化、专业化的信息获取和加工需求,正面临着巨大的挑战。网络爬虫自诞生以来,就发展迅猛,并成为信息技术领域的主要研究热点。当前,主流的网络爬虫搜索策略有如下几种。>>>>深度优先搜索策略 早期的爬虫开发采用较多的搜索策略是以深度优先的,即在一个HTML文件中,挑选其中一个超链接标签进行深度搜索,直至遍历这条超链接到最底层时,由逻辑运算判断本层搜索结束,随后退出本层循环,返回上层循环并开始搜索其他的超链接标签,直至初始文件内的超链接被遍历。深度优先搜索策略的优点是可以将一个Web站点的所有信息全部搜索,对嵌套较深的文档集尤其适用;而缺点是在数据结构日益复杂的情况下,站点的纵向层级会无限增加且不同层级之间会出现交叉引用,会发生无限循环的情况,只有强行关闭程序才能退出遍历,而得到的信息由于大量的重复和冗余,质量很难保证。>>>>宽度优先搜索策略与深度优先搜索策略相对应的是宽度优先搜索策略,其作用机理是从顶层向底层开始循环,先就一级页面中的所有超链接进行搜索,完成一级页面遍历后再开始二级页面的搜索循环,直到底层为止。当某一层中的所有超链接都被选择过,才会基于该层信息检索过程中所获得的下一级超链接(并将其作为种子)开始新的一轮检索,优先处理浅层的链接。这种模式的一个优点是:无论搜索对象的纵向结构层级有多么复杂,都会极大程度上避免死循环;另一个优势则在于,它拥有特定的算法,可以找到两个HTML文件间最短的路径。一般来讲,我们期望爬虫所具有的大多数功能目前均可以采用宽度优先搜索策略较容易的实现,所以它被认为是最优的。但其缺点是:由于大量时间被耗费,宽度优先搜索策略则不太适用于要遍历特定站点和HTML文件深层嵌套的情况。>>>>聚焦搜索策略与深度优先和宽度优先不同,聚焦搜索策略是根据“匹配优先原则”对数据源进行访问,基于特定的匹配算法,主动选择与需求主题相关的数据文档,并限定优先级,据以指导后续的数据抓取。这类聚焦爬虫针对所访问任何页面中的超链接都会判定一个优先级评分,根据评分情况将该链接插入循环队列,此策略能够帮助爬虫优先跟踪潜在匹配程度更高的页面,直至获取足够数量和质量的目标信息。不难看出,聚焦爬虫搜索策略主要在于优先级评分模型的设计,亦即如何区分链接的价值,不同的评分模型针对同一链接会给出不同的评分,也就直接影响到信息搜集的效率和质量。同样机制下,针对超链接标签的评分模型自然可以扩展到针对HTML页面的评价中,因为每一个网页都是由大量超链接标签所构成的,一般看来,链接价值越高,其所在页面的价值也越高,这就为搜索引擎的搜索专业化和应用广泛化提供了理论和技术支撑。当前,常见的聚焦搜索策略包括基于“巩固学习”和“语境图”两种。从应用程度来看,当前国内主流搜索平台主要采用的是宽度优先搜索策略,主要是考虑到国内网络系统中信息的纵向价值密度较低,而横向价值密度较高。但是这样会明显地遗漏到一些引用率较小的网络文档,并且宽度优先搜索策略的横向价值富集效应,会导致这些链接量少的信息源被无限制的忽略下去。而在此基础上补充采用线性搜索策略则会缓解这种状况,不断引入更新的数据信息到已有的数据仓库中,通过多轮的价值判断去决定是否继续保存该信息,而不是“简单粗暴”地遗漏下去,将新的信息阻滞在密闭循环之外。>>>>网页数据动态化传统的网络爬虫技术主要局限于对静态页面信息的抓取,模式相对单一,而近年来,随着Web2.0/AJAX等技术成为主流,动态页面由于具有强大的交互能力,成为网络信息传播的主流,并已取代了静态页面成为了主流。AJAX采用了JavaScript驱动的异步(非同步)请求和响应机制,在不经过网页整体刷新的情况下持续进行数据更新,而传统爬虫技术缺乏对JavaScript语义的接口和交互能力,难以触发动态无刷新页面的异步调用机制并解析返回的数据内容,无法保存所需信息。此外,诸如JQuery等封装了JavaScript的各类前端框架会对DOM结构进行大量调整,甚至网页上的主要动态内容均不必在首次建立请求时就以静态标签的形式从服务器端发送到客户端,而是不断对用户的操作进行回应并通过异步调用的机制动态绘制出来。这种模式一方面极大地优化了用户体验,另一方面很大程度上减轻了服务器的交互负担,但却对习惯了DOM结构(相对不变的静态页面)的爬虫程序提出了巨大挑战。传统爬虫程序主要基于“协议驱动”,而在互联网2.0时代,基于AJAX的动态交互技术环境下,爬虫引擎必须依赖“事件驱动”才有可能获得数据服务器源源不断的数据反馈。而要实现事件驱动,爬虫程序必须解决三项技术问题:第一,JavaScript的交互分析和解释;第二,DOM事件的处理和解释分发;第三,动态DOM内容语义的抽取。前嗅的ForeSpider数据采集系统全方位支持各种动态网站,大部分网站通过可视化的操作就可以获取。对于反爬虫机制严格的网站,通过ForeSpider内部的脚本语言系统,通过简单的脚本语言,就可以轻松获取。>>>>数据采集分布化 分布式爬虫系统是在计算机集群之上运转的爬虫系统,集群每一个节点上运行的爬虫程序与集中式爬虫系统的工作原理相同,所不同的是分布式需要协调不同计算机之间的任务分工、资源分配、信息整合。分布式爬虫系统的某一台计算机终端中植入了一个主节点,并通过它来调用本地的集中式爬虫进行工作,在此基础上,不同节点之间的信息交互就显得十分重要,所以决定分布式爬虫系统成功与否的关键在于能否设计和实现任务的协同。此外,底层的硬件通信网络也十分重要。由于可以采用多节点抓取网页,并能够实现动态的资源分配,因此就搜索效率而言,分布式爬虫系统远高于集中式爬虫系统。经过不断的演化,各类分布式爬虫系统在系统构成上各具特色,工作机制与存储结构不断推陈出新,但主流的分布式爬虫系统普遍运用了“主从结合”的内部构成,也就是由一个主节点通过任务分工、资源分配、信息整合来掌控其他从节点进行信息抓取。在工作方式上,基于云平台的廉价和高效特点,分布式爬虫系统广泛采用云计算方式来降低成本,大规模降低软硬件平台构建所需要的成本投入。在存储方式方面,当前比较流行的是分布式信息存储,即将文件存储在分布式的网络系统上,这样管理多个节点上的数据更加方便。通常情况下使用的分布式文件系统为基于Hadoop的HDFS系统。目前市场上的可视化通用性爬虫,大都牺牲了性能去换取简易的可视化操作。但前嗅的ForeSpider爬虫不是。ForeSpider采用C++编程,普通台式机日采集量超过500万条/天,服务器超过4000万条/天。是市场上其他可视化爬虫的10倍以上。同时,ForeSpider内嵌前嗅自主研发的ForeLib数据库,免费的同时支持千万量级以上的数据存储。>>>>通用型和主题型网络爬虫 依据采集目标的类型,网络爬虫可以归纳为“通用型网络爬虫”和“主题型网络爬虫”两种。通用型网络爬虫侧重于采集更大的数据规模和更宽的数据范围,并不考虑网页采集的顺序和目标网页的主题匹配情况。在当前网络信息规模呈现指数增长的背景下,通用型网络爬虫的使用受到信息采集速度、信息价值密度、信息专业程度的限制。为缓解这种状况,主题型网络爬虫诞生了。不同于通用型网络爬虫,主题型网络爬虫更专注采集目标与网页信息的匹配程度,避免无关的冗余信息,这一筛选过程是动态的,贯穿于主题型网络爬虫技术的整个工作流程。目前市面上的通用性爬虫的采集能力有限,采集能力不高,网页结构复杂的页面无法采集。前嗅ForeSpider爬虫是通用型的网络爬虫,可以采集几乎100%的网页,并且内部支持可视化筛选、正则表达式、脚本等多种筛选,可以100%过滤无关冗余内容,按条件筛选内容。相对主题型爬虫只能采集一类网站而言,通用型的爬虫有着更强的采集范围,更加经济合理。