什么是网络爬虫
网络爬虫又名“网络蜘蛛”,是通过网页的链接地址来寻找网页,从网站某一个页面开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,知道按照某种策略把互联网上所有的网页都抓取完为止的技术。
网络爬虫的分类及工作原理
网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler)、主题网络爬虫(Topical Web Crawler)、深层网络爬虫(Deep Web Crawler)。实际应用中通常是将系统几种爬虫技术相互结合。
(一)通用网络爬虫(general purpose web crawler)
通用网络爬虫根据预先设定的一个或若干初始种子URL开始,以此获得初始网页上的URL列表,在爬行过程中不断从URL队列中获一个的URL,进而访问并下载该页面。页面下载后页面解析器去掉页面上的HTML标记后得到页面内容,将摘要、URL等信息保存到Web数据库中,同时抽取当前页面上新的URL,保存到URL队列,直到满足系统停止条件。其工作流程如图1所示。
通用爬虫主要存在以下几方面的局限性:1)由于抓取目标是尽可能大的覆盖网络,所以爬行的结果中包含大量用户不需要的网页;2)不能很好地搜索和获取信息含量密集且具有一定结构的数据;3)通用搜索引擎大多是基于关键字的检索,对于支持语义信息的查询和索引擎智能化的要求难以实现。
由此可见,通用爬虫想在爬行网页时,既保证网页的质量和数量,又要保证网页的时效性是很难实现的。
(二)主题网络爬虫(Topical Web Crawler)
1.主题爬虫原理
主题爬虫并不追求大的覆盖率,也不是全盘接受所有的网页和URL,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息,不仅客服了通用爬虫存在的问题,而H-返回的数据资源更精确。主题爬虫的基本工作原理是按照预先确定的主题,分析超链接和刚刚抓取的网页内容,获取下一个要爬行的URL,尽可能保证多爬行与主题相关的网页,因此主题爬虫要解决以下关键问题:1)如何判定一个已经抓取的网页是否与主题相关;2)如何过滤掉海量的网页中与主题不相关的或者相关度较低的网页;3)如何有目的、有控制的抓取与特定主题相关的web页面信息;4)如何决定待访问URL的访问次序;5)如何提高主题爬虫的覆盖度;6)如何协调抓取目标的描述或定义与网页分析算法及候选URL排序算法之问的关系;7)如何寻找和发现高质量网页和关键资源。高质量网页和关键资源不仅可以大大提高主题爬虫搜集Web页面的效率和质量,还可以为主题表示模型的优化等应用提供支持。
2.主题爬虫模块设计
主题爬虫的目标是尽可能多的发现和搜集与预定主题相关的网页,其最大特点在于具备分析网页内容和判别主题相关度的能力。根据主题爬虫的工作原理,下面设计了一个主题爬虫系统,主要有页面采集模块、页面分析模块、相关度计算模块、页面过滤模块和链接排序模块几部分组成,其总体功能模块结构如图2所示。
页面采集模块:主要是根据待访问URL队列进行页面下载,再交给网页分析模型处理以抽取网页主题向量空间模型。该模块是任何爬虫系统都必不可少的模块。页面分析模块:该模块的功能是对采集到的页面进行分析,主要用于连接超链接排序模块和页面相关度计算模块。
页面相关度计算模块:该模块是整个系统的核心模块,主要用于评估与主题的相关度,并提供相关的爬行策略用以指导爬虫的爬行过程。URL的超链接评价得分越高,爬行的优先级就越高。其主要思想是,在系统爬行之前,页面相关度计算模块根据用户输入的关键字和初始文本信息进行学习,训练一个页面相关度评价模型。当一个被认为是主题相关的页面爬行下来之后,该页面就被送入页面相关度评价器计算其主题相关度值,若该值大于或等于给定的某阂值,则该页面就被存入页面库,否则丢弃¨。页面过滤模块:过滤掉与主题无关的链接,同时将该URL及其所有隐含的子链接一并去除。通过过滤,爬虫就无需遍历与主题不相关的页面,从而保证了爬行效率。排序模块:将过滤后页面按照优先级高低加入到待访问的URL队列里。
3.主题爬虫流程设计
主题爬虫需要根据一定的网页分析算法,过滤掉与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它会根据一定的搜索策略从待抓取的队列中选择下一个要抓取的URL,并重复上述过程,直到满足系统停止条件为止。所有被抓取网页都会被系统存储,经过一定的分析、过滤,然后建立索引,以便用户查询和检索;这一过程所得到的分析结果可以对以后的抓取过程提供反馈和指导。其工作流程如图3所示。
4.深度网络爬虫(Deep Web Crawler)
1994年Dr.jillEllsworth提出DeepWeb(深层页面)的概念,即DeepWeb是指普通搜索引擎难以发现的信息内容的Web页面¨。DeepWeb中的信息量比普通的网页信息量多,而且质量更高。但是普通的搜索引擎由于技术限制而搜集不到这些高质量、高权威的信息。这些信息通常隐藏在深度Web页面的大型动态数据库中,涉及数据集成、中文语义识别等诸多领域。如此庞大的信息资源如果没有合理的、高效的方法去获取,将是巨大的损失。因此,对于深度网爬行技术的研究具有极为重大的现实意义和理论价值。
常规的网络爬虫在运行中无法发现隐藏在普通网页中的信息和规律,缺乏一定的主动性和智能性。比如需要输入用户名和密码的页面,或者包含页码导航的页面均无法爬行。深度爬虫的设计针对常规网络爬虫的这些不足,将其结构做以改进,增加了表单分析和页面状态保持两个部分,其结构如图4所示,通过分析网页的结构并将其归类为普通网页或存在更多信息的深度网页,针对深度网页构造合适的表单参数并且提交,以得到更多的页面。深度爬虫的流程图如图4所示。深度爬虫与常规爬虫的不同是,深度爬虫在下载完成页面之后并没有立即遍历其中的所有超链接,而是使用一定的算法将其进行分类,对于不同的类别采取不同的方法计算查询参数,并将参数再次提交到服务器。如果提交的查询参数正确,那么将会得到隐藏的页面和链接。深度爬虫的目标是尽可能多地访问和收集互联网上的网页,由于深度页面是通过提交表单的方式访问,因此爬行深度页面存在以下三个方面的困难:1)深度爬虫需要有高效的算法去应对数量巨大的深层页面数据;2)很多服务器端DeepWeb要求校验表单输入,如用户名、密码、校验码等,如果校验失败,将不能爬到DeepWeb数据;3)需要JavaScript等脚本支持分析客户端DeepWeb。
网络爬虫的搜索策略
(1)IP地址搜索策略
IP地址搜索策略是先给爬虫一个起始的IP地址,然后根据IP地址以递增的方式搜索本IP地址段后的每一个地址中的文档,它完全不考虑各文档中指向其它Web站点的超级链接地址。这种搜索策略的优点是搜索比较全面,因此能够发现那些没被其它文档引用的新文档的信息源;但是缺点是不适合大规模搜索。
(2)深度优先搜索策略
深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件)。例如,在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,也就是说在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。
(3)宽度优先搜索策略
宽度优先搜索的过程是先搜索完一个Web页面中所有的超级链接,然后再继续搜索下一层,直到底层为止。例如,一个HTML文件中有三个超链,选择其中之一并处理相应的HTML文件,然后不再选择第二个HTML文件中的任何超链,而是返回并选择第二个超链,处理相应的HTML文件,再返回,选择第三个超链并处理相应的HTML文件。当一层上的所有超链都已被选择过,就可以开始在刚才处理过的HIML文件中搜索其余的超链。
宽度优先搜索策略的优点:一个是保证了对浅层的优先处理,当遇到一个无穷尽的深层分支时,不会导致陷进www中的深层文档中出现出不来的情况发生;另一个是它能在两个HTML文件之间找到最短路径。
宽度优先搜索策略通常是实现爬虫的最佳策略,因为它容易实现,而且具备大多数期望的功能。但是如果要遍历一个指定的站点或者深层嵌套的HTML文件集,用宽度优先搜索策略则需要花费比较长的时间才能到达深层的HTML文件。