一、什么是网络爬虫
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
网络爬虫流程
二、爬虫的分类:
1、通用网络爬虫:通用网络爬虫又称全网爬虫(Scalable Web Crawler),爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。 由于商业原因,它们的技术细节很少公布出来。 这类网络爬虫的爬行范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求相对较低,同时由于待刷新的页面太多,通常采用并行工作方式,但需要较长时间才能刷新一次页面。 虽然存在一定缺陷,通用网络爬虫适用于为搜索引擎搜索广泛的主题,有较强的应用价值。
2、聚焦网络爬虫:聚焦网络爬虫(Focused Crawler),又称主题网络爬虫(Topical Crawler),是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫[8]。 和通用网络爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求。
3、增量式网络爬虫:增量式网络爬虫(Incremental Web Crawler)是 指 对 已 下 载 网 页 采 取 增 量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。 和周期性爬行和刷新页面的网络爬虫相比,增量式爬虫只会在需要的时候爬行新产生或发生更新的页面 ,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。增量式网络爬虫的体系结构[包含爬行模块、排序模块、更新模块、本地页面集、待爬行 URL 集以及本地页面URL 集。
4、Deep Web 爬虫:Web 页面按存在方式可以分为表层网页(Surface Web)和深层网页(Deep Web,也称 Invisible Web Pages 或 Hidden Web)。 表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的 Web 页面。Deep Web 是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的 Web 页面。例如那些用户注册后内容才可见的网页就属于 Deep Web。 2000 年 Bright Planet 指出:Deep Web 中可访问信息容量是 Surface Web 的几百倍,是互联网上最大、发展最快的新型信息资源。
网络爬虫的分类
三、爬虫抓取目标分类:基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。根据种子样本获取方式可分为:
1、基于目标网页特征:
1.1、预先给定的初始抓取种子样本;
1.2、预先给定的网页分类目录和与分类目录对应的种子样本,如Yahoo!分类结构等;
1.3、通过用户行为确定的抓取目标样例,分为:
Ⅰ、用户浏览过程中显示标注的抓取样本;
Ⅱ、通过用户日志挖掘得到访问模式及相关样本。
其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。
2、基于目标数据模式:基于目标数据模式的爬虫针对的是网页上的数据,所抓取的数据一般要符合一定的模式,或者可以转化或映射为目标数据模式。
3、基于领域概念:另一种描述方式是建立目标领域的本体或词典,用于从语义角度分析不同特征在某一主题中的重要程度。
爬虫网页搜索策略
四、网页搜索策略:
网页的抓取策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。
1、广度优先搜索
广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。也有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。另外一种方法是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺点在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低。
2、最佳优先搜索
最佳优先搜索策略按照一定的网页分析算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取。它只访问经过网页分析算法预测为“有用”的网页。存在的一个问题是,在爬虫抓取路径上的很多相关网页可能被忽略,因为最佳优先策略是一种局部最优搜索算法。因此需要将最佳优先结合具体的应用进行改进,以跳出局部最优点。将在第4节中结合网页分析算法作具体的讨论。研究表明,这样的闭环调整可以将无关网页数量降低30%~90%。
3、深度优先搜索
深度优先搜索策略从起始网页开始,选择一个URL进入,分析这个网页中的URL,选择一个再进入。如此一个链接一个链接地抓取下去,直到处理完一条路线之后再处理下一条路线。深度优先策略设计较为简单。然而门户网站提供的链接往往最具价值,PageRank也很高,但每深入一层,网页价值和PageRank都会相应地有所下降。这暗示了重要网页通常距离种子较近,而过度深入抓取到的网页却价值很低。同时,这种策略抓取深度直接影响着抓取命中率以及抓取效率,对抓取深度是该种策略的关键。相对于其他两种策略而言。此种策略很少被使用。
常见爬虫汇总
五、常见爬虫汇总:
1、RBSE (Eichmann,1994)是第一个发布的爬虫。它有两个基础程序。第一个是“spider”,抓取队列中的内容到一个关系数据库中,第二个程序是“mite”,是一个修改后的www的ASCII浏览器,负责从网络上下载页面。
2、WebCrawler(Pinkerton,1994)是第一个公开可用的用来建立全文索引的一个子程序,他使用库www来下载页面;另外一个程序使用广度优先来解析获取URL并对其排序;它还包括一个根据选定文本和查询相似程度爬行的实时爬虫。
3、World Wide Web Worm (McBryan, 1994)是一个用来为文件建立包括标题和URL简单索引的爬虫。索引可以通过grep式的Unix命令来搜索。
4、Google Crawler (Brin and Page, 1998)用了一些细节来描述,但是这些细节仅仅是关于使用C++和Python编写的、一个早期版本的体系结构。因为文本解析就是文检索和URL抽取的过程,所以爬虫集成了索引处理。这里拥有一个URL永定服务器,用来给几个爬虫程序发送要抓取的URL列表。在文本解析的时候,新发现的URL传送给URL永定服务器并检测这个URL是不是已经存在,如果不存在的话,该URL就加入到URL永定服务器中。
5、CobWeb (da Silva et al., 1999)使用了一个中央“调度者”和一系列的“分布式的搜集者”。搜集者解析下载的页面并把找到的URL发送给调度者,然后调度者反过来分配给搜集者。调度者使用深度优先策略,并且使用平衡礼貌策略来避免服务器超载。爬虫是使用Perl语言编写的。
6、Mercator (Heydon and Najork, 1999; Najork and Heydon, 2001)是一个分布式的,模块化的使用java编写的网络爬虫。它的模块化源自于使用可互换的的“协议模块”和“处理模块”。协议模块负责怎样获取网页(例如使用HTTP),处理模块负责怎样处理页面。标准处理模块仅仅包括了解析页面和抽取URL,其他处理模块可以用来检索文本页面,或者搜集网络数据。
7、WebFountain (Edwards et al., 2001)是一个与Mercator类似的分布式的模块化的爬虫,但是使用C++编写的。它的特点是一个管理员机器控制一系列的蚂蚁机器。经过多次下载页面后,页面的变化率可以推测出来,这时,一个非线性的方法必须用于求解方程以获得一个最大的新鲜度的访问策略。作者推荐在早期检索阶段使用这个爬虫,然后用统一策略检索,就是所有的页面都使用相同的频率访问。
8、PolyBot [Shkapenyuk and Suel, 2002]是一个使用C++和Python编写的分布式网络爬虫。它由一个爬虫管理者,一个或多个下载者,一个或多个DNS解析者组成。抽取到的URL被添加到硬盘的一个队列里面,然后使用批处理的模式处理这些URL。平衡礼貌方面考虑到了第二、三级网域(例如www.seokuaipai.cn 和 www2.seokuaipai.cn 都是三级网域),因为第三级网域通常也会保存在同一个网络服务器上。
9、WebRACE (Zeinalipour-Yazti and Dikaiakos, 2002)是一个使用java实现的,拥有检索模块和缓存模块的爬虫,它是一个很通用的称作eRACE的系统的一部分。系统从用户得到下载页面的请求,爬虫的行为有点像一个聪明的代理服务器。系统还监视订阅网页的请求,当网页发生改变的时候,它必须使爬虫下载更新这个页面并且通知订阅者。WebRACE最大的特色是,当大多数的爬虫都从一组URL开始的时候,WebRACE可以连续地的接收抓取开始的URL地址。
10、Ubicrawer (Boldi et al., 2004)是一个使用java编写的分布式爬虫。它没有中央程序。它有一组完全相同的代理组成,分配功能通过主机前后一致的散列计算进行。这里没有重复的页面,除非爬虫崩溃了(然后,另外一个代理就会接替崩溃的代理重新开始抓取)。爬虫设计为高伸缩性和允许失败的。
11、FAST Crawler (Risvik and Michelsen, 2002) 是一个分布式的爬虫,在Fast Search&Transfer中使用,关于其体系结构的一个大致的描述可以在[citation needed]找到。
12、Labrador,一个工作在开源项目Terrier Search Engine上的非开源的爬虫。
13、TeezirCrawler是一个非开源的可伸缩的网页抓取器,在Teezir上使用。该程序被设计为一个完整的可以处理各种类型网页的爬虫,包括各种JavaScript和HTML文档。爬虫既支持主题检索也支持非主题检索。
14、Spinn3r, 一个通过博客构建Tailrank.com反馈信息的爬虫。 Spinn3r是基于java的,它的大部分的体系结构都是开源的。
15、HotCrawler,一个使用c语言和php编写的爬虫。
16、ViREL Microformats Crawler,搜索公众信息作为嵌入到网页的一小部分。
除了上面列出的几个特定的爬虫结构以外,还有Cho (Cho and Garcia-Molina, 2002)和Chakrabarti (Chakrabarti, 2003)发布的一般的爬虫体系结构。
开源爬虫汇总
六、开源爬虫汇总:
1、DataparkSearch是一个在GNU GPL许可下发布的爬虫搜索引擎。
2、GNU Wget是一个在GPL许可下,使用C语言编写的命令行式的爬虫。它主要用于网络服务器和FTP服务器的镜像。
3、Heritrix是一个互联网档案馆级的爬虫,设计的目标为对大型网络的大部分内容的定期存档快照,是使用java编写的。
4、Ht://Dig在它和索引引擎中包括了一个网页爬虫。
5、HTTrack用网络爬虫创建网络站点镜像,以便离线观看。它使用C语言编写,在GPL许可下发行。
6、ICDL Crawler是一个用C++编写,跨平台的网络爬虫。它仅仅使用空闲的CPU资源,在ICDL标准上抓取整个站点。
7、JSpider是一个在GPL许可下发行的,高度可配置的,可定制的网络爬虫引擎。
8、LLarbin由Sebastien Ailleret开发;
9、Webtools4larbin由Andreas Beder开发;
10、Methabot是一个使用C语言编写的高速优化的,使用命令行方式运行的,在2-clause BSD许可下发布的网页检索器。它的主要的特性是高可配置性,模块化;它检索的目标可以是本地文件系统,HTTP或者FTP。
11、Nutch是一个使用java编写,在Apache许可下发行的爬虫。它可以用来连接Lucene的全文检索套件;
12、Pavuk是一个在GPL许可下发行的,使用命令行的WEB站点镜像工具,可以选择使用X11的图形界面。与wget和httprack相比,他有一系列先进的特性,如以正则表达式为基础的文件过滤规则和文件创建规则。
13、WebVac是斯坦福WebBase项目使用的一个爬虫。
14、WebSPHINX(Miller and Bharat, 1998)是一个由java类库构成的,基于文本的搜索引擎。它使用多线程进行网页检索,html解析,拥有一个图形用户界面用来设置开始的种子URL和抽取下载的数据;
15、WIRE-网络信息检索环境(Baeza-Yates 和 Castillo, 2002)是一个使用C++编写,在GPL许可下发行的爬虫,内置了几种页面下载安排的策略,还有一个生成报告和统计资料的模块,所以,它主要用于网络特征的描述;
16、LWP:RobotUA(Langheinrich,2004)是一个在Perl5许可下发行的,可以优异的完成并行任务的 Perl类库构成的机器人。
17、Web Crawler是一个为.net准备的开放源代码的网络检索器(C#编写)。
18、Sherlock Holmes收集和检索本地和网络上的文本类数据(文本文件,网页),该项目由捷克门户网站中枢(Czech web portal Centrum)赞助并且主用商用于这里;它同时也使用在Onet.pl。
19、YaCy是一个基于P2P网络的免费的分布式搜索引擎(在GPL许可下发行);
20、Ruya是一个在广度优先方面表现优秀,基于等级抓取的开放源代码的网络爬虫。在英语和日语页面的抓取表现良好,它在GPL许可下发行,并且完全使用Python编写。按照robots.txt有一个延时的单网域延时爬虫。
21、Universal Information Crawler快速发展的网络爬虫,用于检索存储和分析数据;
22、Agent Kernel,当一个爬虫抓取时,用来进行安排,并发和存储的java框架。
23、Arachnod.net是一个使用C#编写,需要SQL Server 2005支持的,在GPL许可下发行的多功能的开源的机器人。它可以用来下载,检索,存储包括电子邮件地址,文件,超链接,图片和网页在内的各种数据。
24、Dine是一个多线程的java的http客户端。它可以在LGPL许可下进行二次开发。
以上文章来源于网络,如有侵权请联系创一网的客服处理。谢谢!