开源爬虫 ── 专业、强大的万维网资源定向抓取、爬抓工具
网络爬虫 又称网页蜘蛛、网络机器人、在 FOAF 社区常称网页追逐者。网络爬虫 是一种按照一定规则,自动抓取万维网信息的程序或脚本。另外一些不常使用名称还有蚂蚁、自动索引、模拟程序或蠕虫。
随着网络的迅速发展,万维网成为大量信息的载体,如何有效提取并利用这些信息成为一个巨大挑战。搜索引擎 (Search Engine),譬如:传统搜索引擎 AltaVista、Yahoo!、Google、百度、360 搜索、好搜、搜狗、Bing 等作为辅助人们检索信息的工具,已成为用户访问万维网的入口和指南。但是,这些通用搜索引擎也存在一定局限性。譬如:
01、不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心网页;
02、通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深;
03、万维网数据形式丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取;
04、通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
为解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关链接,获取所需要的信息。与通用爬虫 (general purpose web crawler) 不同,聚焦爬虫并不追求大的覆盖率,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。
网路爬虫是搜索引擎的核心,他们的算法和结构上的细节被当作商业机密。当爬虫的设计发布时,总会有一些为了阻止别人复制工作而缺失的细节。人们也开始关注主要用于阻止主要搜索引擎发布他们的排序算法的 “搜索引擎垃圾邮件”。
URL一般化
爬虫通常会执行几种类型的 URL 规范化来避免重复抓取某些资源。URL 一般化也被称为 URL 标准化,指的是修正 URL 并使其前后一致的过程。这里有几种一般化方法,包括转化 URL 为小写的,去除逗号(如 ‘.’ ‘..’ 等),对非空的路径,在末尾加反斜杠。
爬虫身份识别
网络爬虫通过使用 http 请求的用户代理 (User Agent) 字段来向网络服务器表明他们的身份。网络管理员则通过检查网络服务器的日志,使用用户代理字段来辨认哪一个爬虫曾经访问过以及它访问的频率。
用户代理字段可能会包含一个可以让管理员获取爬虫更多信息的 URL。邮件抓取器和其他怀有恶意的网络爬虫通常不会留任何的用户代理字段内容,或者他们也会将他们的身份伪装成浏览器或其他知名爬虫。
对于网路爬虫,留下用户标志信息十分重要;这样,网络管理员在需要的时候就可以联系爬虫主人。有时,爬虫可能会陷入爬虫陷阱或使一个服务器超负荷,这时,爬虫主人需要使爬虫停止。对那些有兴趣了解特定爬虫访问时间网络管理员来讲,用户标识信息是十分重要的。
开源爬虫
开发语言 | 软件名称 | 软件介绍 | 许可证 | Java | Arachnid | 微型爬虫框架,含有一个小型 HTML 解析器。 | GPL |
| crawlzilla | 安装简易,拥有中文分词功能。 | Apache2 |
| Ex-Crawler | 由守护进程执行,使用数据库存储网页信息。 | GPLv3 |
| Heritrix | 一个互联网档案馆级的爬虫,设计的目标是对大型网络的大部分内容的定期存档快照,用 java 编写。严格遵照 robots 文件的排除指示和 META robots 标签。 | LGPL |
| heyDr | 轻量级开源多线程垂直检索爬虫框架。 | GPLv3 |
| ItSucks | 提供 swing GUI 操作界面。 | 不详 |
| jcrawl | 轻量、性能优良,可以从网页抓取各种类型的文件。 | Apache |
| JSpider | 在 GPL 许可下发行,高度可配置、可定制、功能强大、容易扩展的网络爬虫引擎。 | LGPL |
| Leopdo | 包括全文和分类垂直搜索,以及分词系统。 | Apache |
| MetaSeeker | 网页抓取、信息提取、数据抽取工具包,操作简单。 | 不详 |
| Playfish | 通过 XML 配置文件实现高度可定制性与可扩展性。 | MIT |
| Spiderman | 灵活、扩展性强,微内核+插件式架构,通过简单的配置就可以完成数据抓取,无需编写一句代码。 | Apache |
| webmagic | 功能覆盖整个爬虫生命周期,使用 Xpath 和正则表达式进行链接和内容的提取。 | Apache |
| Web-Harvest | 运用 XSLT、XQuery、正则表达式等技术来实现对 Text 或 XML 的操作,具有可视化的界面。 | BSD |
| WebSPHINX | (Miller and Bharat, 1998) 由 java 类库构成,基于文本的搜索引擎。它使用多线程进行网页检索,html 解析,拥有一个图形用户界面用来设置开始的种子 URL 和抽取下载的数据;WebSPHINX 由两部分组成:爬虫工作平台和 WebSPHINX 类包。 | Apache |
| YaCy | 基于 P2P 网络的免费分布式 Web 搜索引擎(在 GPL 许可下发行)。 | GPL |
| Nutch | 用 java 编写,在 Apache 许可下发行的爬虫。它可以用来连接 Lucene 的全文检索套件。 | Apache |
| Agent Kernel | 当一个爬虫抓取时,用来进行安排,并发和存储的 java 框架。 | /
|
| Dine | 一个多线程的 java 的 http 客户端。它可以在 LGPL 许可下进行二次开发。 | LGPL |
| Anthelion | 雅虎 Web 爬虫工具,可爬取 HTML 语法结构数据。Anthelion 源代码托管于 GitHub,作为 Apache Nutch 开源 web 爬虫项目的一个组件。 | Apache |
|
|
|
| Python | QuickRecon | 具有查找子域名名称、收集电子邮件地址并寻找人际关系等功能。 | GPLv3 |
| PyRailgun | 简洁、轻量、高效的网页抓取框架。 | MIT |
| Scrapy | 基于 Twisted 的异步处理框架,文档齐全。 | BSD |
| Ruya | 一个在广度优先方面表现优秀,基于等级抓取的开放源代码的网络爬虫。在英语和日语页面的抓取表现良好,它在 GPL 许可下发行,并且完全用 Python 编写。按照 robots.txt 有一个延时的单网域延时爬虫。 | GPL
|
| PySipder | PySipder 是一个 Python 爬虫程序。演示地址:http://demo.pyspider.org/。使用 Python 编写脚本,分布式架构,提供强大的 API,支持 Python 2&3、支持 JavaScript 页面。强大的 WebUI 和脚本编辑器、任务监控和项目管理和结果查看。后端系统支持:MySQL、MongoDB、SQLite、Postgresql。支持任务优先级、重试、定期抓取等。 |
|
|
|
|
| C | GNU Wget | 一个在 GPL 许可下用 C 语言编写的命令行式的爬虫。主要用于网络服务器和 FTP 服务器的镜像。 | GPL |
| HTTrack | HTTrack 用网络爬虫创建网络站点镜像,以便离线观看。它使用 C 语言编写,在 GPL 许可下发行。 | GPL |
| Methabot | 用 C 语言编写,高速优化,可使用命令行方式运行,在 2-clause BSD 许可下发布的网页检索器。它的主要的特性是高可配置性,模块化;它检索的目标可以是本地文件系统,HTTP 或者 FTP。 | BSD |
| Pavuk | 在 GPL 许可下发行,使用命令行的 WEB 站点镜像工具,可以选择使用 X11 的图形界面。与 wget 和 httprack 相比,他有一系列先进特性,如以正则表达式为基础的文件过滤规则和文件创建规则。 | GPL |
|
|
|
| C++ | hispider | 支持多机分布式下载,支持网站定向下载。 | BSD |
| larbin | 高性能的爬虫软件,只负责抓取不负责解析。 | GPL |
| ICDL Crawler | 用 C++ 编写,跨平台的网络爬虫。它仅仅使用空闲 CPU 资源,在 ICDL 标准上抓取整个站点。 | / |
| Methanol | 模块化、可定制的网页爬虫,速度快。 | 不详 |
| WIRE | 网络信息检索环境 (Baeza-Yates 和 Castillo, 2002) 用 C++ 编写,在 GPL 许可下发行的爬虫,内置了几种页面下载安排的策略,还有一个生成报告和统计资料的模块,所以,它主要用于网络特征的描述。 | GPL |
|
|
|
| C# | NWebCrawler | 统计信息、执行过程可视化。 | GPLv2 |
| Sinawler | 国内第一个针对微博数据的爬虫程序,功能强大。 | GPLv3 |
| spidernet | 以递归树为模型的多线程 web 爬虫程序,支持以 GBK (gb2312) 和 utf8 编码的资源,使用 sqlite 存储数据。 | MIT |
| Web Crawler | 为 .net 准备的开放源代码的网络检索器。多线程,支持抓取 PDF/DOC/EXCEL 等文档来源。 | LGPL |
| 网络矿工 | 功能丰富,毫不逊色于商业软件。 | BSD |
|
|
|
| PHP | OpenWebSpider | 开源多线程网络爬虫,有许多有趣的功能。 | 不详 |
| PhpDig | 适用于专业化强、层次更深的个性化搜索引擎。 | GPL |
| Snoopy | 具有采集网页内容、提交表单功能。 | GPL |
| ThinkUp | 采集推特、脸谱等社交网络数据的社会媒体视角引擎,可进行交互分析并将结果以可视化形式展现。 | GPL |
| 微购 | 可采集淘宝、京东、当当、等 300 多家电子商务数据。 | GPL |
|
|
|
| ErLang | Ebot | 可伸缩的分布式网页爬虫。 | GPLv3 |
|
|
|
| Ruby | Spidr | 可将一个或多个网站、某个链接完全抓取到本地。 | MIT |
|
|
|
| Perl | LWP:RobotUA | (Langheinrich, 2004) 是一个在 Perl5 许可下发行的,可以优异的完成并行任务的 Perl 类库构成的机器人。 | Perl5 |
|
|
|
| 其它 | DataparkSearch | 一个在 GNU GPL 许可下发布的爬虫搜索引擎。 | GPL |
| Ht://Dig | 在它和索引引擎中包括一个网页爬虫。 | /
|
| LLarbin | LLarbin 由 Sebastien Ailleret 开发。 | /
|
| Webtools4larbin | Webtools4larbin 由 Andreas Beder 开发。 | / |
| WebVac | 斯坦福 WebBase 项目使用的一个爬虫。 | /
|
| Sherlock Holmes | 收集和检索本地和网络上的文本类数据(文本文件,网页),该项目由捷克门户网站中枢(Czech web portal Centrum)赞助并且主要用于商用。 | / |
| Universal Information Crawler | 快速发展的网络爬虫,用于检索存储和分析数据。 | /
|
网络爬虫的组成
在网络爬虫系统框架中,主过程由控制器、解析器、资源库 3 部分组成。控制器的主要工作是负责给多线程中的各个爬虫线程分配工作任务。解析器的主要工作是下载网页,进行页面的处理,主要是将一些 JS 脚本标签、CSS 代码内容、空格字符、HTML 标签等内容处理掉,爬虫的基本工作由解析器完成。资源库是用来存放下载的网页资源,一般采用大型数据库存储,如 Oracle 数据库,并对其建立索引。
01、控制器
控制器是网络爬虫的中央控制器,它主要是负责根据系统传过来的 URL 链接,分配一线程,然后启动线程调用爬虫爬取网页的过程。
02、解析器
解析器是负责网络爬虫的主要部分,其负责的工作主要有:下载网页功能,对网页文本进行处理;譬如:过滤功能、抽取特殊 HTML 标签的功能、分析数据功能。
03、资源库
主要是用来存储网页中下载下来的数据记录的容器,并提供生成索引的目标源。中大型的数据库产品有:Oracle、Sql Server 等。
其它爬虫
开发语言 | 软件名称 | 作者 | 发布时间 | 软件介绍 | 许可证 | /
| RBSE | Eichmann | 1994 年
| 第一个发布的爬虫。它有 2 个基础程序。第一个是 “spider”,抓取队列中的内容到一个关系数据库中,第二个程序是 “mite”,是一个修改后的 www 的 ASCII 浏览器,负责从网络上下载页面。 |
| /
| Web Crawler | Pinkerton
| 1994 年 | 是第一个公开可用的用来建立全文索引的一个子程序,他使用库 www 来下载页面;另外一个程序使用广度优先来解析获取 URL 并对其排序;它还包括一个根据选定文本和查询相似程度爬行的实时爬虫。
|
| / | World Wide Web Worm | McBryan | 1994 年
| 用来为文件建立包括标题和URL 简单索引的爬虫。索引可以通过 grep 式的 Unix 命令来搜索。 | | C++、Python
| Google Crawler | Brin and Page
| 1998 年
| 用了一些细节来描述,但是这些细节仅仅是关于使用 C++ 和 Python 编写的、一个早期版本的体系结构。因为文本解析就是全文检索和 URL 抽取的过程,所以爬虫集成了索引处理。这里拥有一个 URL 服务器,用来给几个爬虫程序发送要抓取的 URL 列表。在解析文本时,新发现的 URL 传送给 URL 服务器并检测这个 URL 是不是已经存在,如果不存在的话,该 URL 就加入到 URL 服务器中。 | | Perl | CobWeb | da Silva et al. | 1999 年
| 使用了一个中央 “调度者” 和一系列的 “分布式搜集者”。搜集者解析下载的页面并把找到的 URL 发送给调度者,然后调度者反过来分配给搜集者。调度者使用深度优先策略,并且使用平衡礼貌策略来避免服务器超载。爬虫是使用 Perl 语言编写的。 |
| Java | Mercator | Heydon and Najork | 1999 年 | 一个分布式的,模块化的使用 java 编写的网络爬虫。它的模块化源自于使用可互换的 “协议模块” 和 “处理模块”。协议模块负责怎样获取网页(譬如:使用 HTTP),处理模块负责怎样处理页面。标准处理模块仅仅包括了解析页面和抽取 URL,其他处理模块可以用来检索文本页面,或者搜集网络数据。 |
| Java | Mercator | Najork and Heydon | 2001 年 | 一个分布式的,模块化的使用 java 编写的网络爬虫。它的模块化源自于使用可互换的 “协议模块” 和 “处理模块”。协议模块负责怎样获取网页(譬如:使用 HTTP),处理模块负责怎样处理页面。标准处理模块仅仅包括了解析页面和抽取 URL,其他处理模块可以用来检索文本页面,或者搜集网络数据。 |
| C++ | WebFountain | Edwards et al. | 2001 年 | 一个与 Mercator 类似的分布式的模块化的爬虫,但使用 C++ 编写。它的特点是一个管理员机器控制一系列的蚂蚁机器。经过多次下载页面后,页面的变化率可以推测出来,这时,一个非线性的方法必须用于求解方程以获得一个最大的新鲜度的访问策略。作者推荐在早期检索阶段使用这个爬虫,然后用统一策略检索,就是所有的页面都使用相同的频率访问。 |
| C++、Python | PolyBot | Shkapenyuk and Suel | 2002 年 | 一个使用 C++ 和 Python 编写的分布式网络爬虫。它由一个爬虫管理者,一个或多个下载者,一个或多个 DNS 解析者组成。抽取到的 URL 被添加到硬盘的一个队列里面,然后使用批处理的模式处理这些 URL。平衡礼貌方面考虑到了第 2、3 级网域,因为第 3 级网域通常也会保存在同一个网络服务器上。 |
| Java | WebRACE | Zeinalipour-Yazti and Dikaiakos | 2002 年 | 一个使用 java 实现的,拥有检索模块和缓存模块的爬虫,它是一个很通用的称作 eRACE 的系统的一部分。系统从用户得到下载页面请求,爬虫行为有点像一个聪明的代理服务器。系统还监视订阅网页请求,当网页发生改变时,它必须使爬虫下载更新这个页面并且通知订阅者。WebRACE 最大的特色是,当大多数的爬虫都从一组 URL 开始时,WebRACE 可连续接收抓取开始的 URL 地址。 |
| /
| FAST Crawler | Risvik and Michelsen | 2002 年 | 一个分布式爬虫,在 Fast Search & Transfer 中使用,关于其体系结构的一个大致的描述可以在 [citation needed] 找到。 |
| /
| Cho | Cho and Garcia-Molina | 2002 年 | 一般爬虫体系结构。 |
| /
| Chakrabarti | Chakrabarti | 2003 年 | 一般爬虫体系结构。 |
| Java | Ubicrawe | Boldi et al. | 2004 年 | 一个使用 java 编写的分布式爬虫。它没有中央程序。它有一组完全相同的代理组成,分配功能通过主机前后一致的散列计算进行。这里没有重复的页面,除非爬虫崩溃了(然后,另外一个代理就会接替崩溃的代理重新开始抓取)。爬虫设计为高伸缩性和允许失败的。 |
| /
| Labrador | /
| /
| 一个工作在开源项目 Terrier Search Engine 上的非开源爬虫。 |
| /
| eezirCrawler | /
| /
| 一个非开源的可伸缩的网页抓取器,在 Teezir 上使用。该程序被设计为一个完整的可以处理各种类型网页的爬虫,包括各种 JavaScript 和 HTML 文档。爬虫既支持主题检索也支持非主题检索。 |
| Java | Spinn3r | /
| /
| 一个通过博客构建反馈信息的爬虫。 Spinn3r 基于 java,它的大部分的体系结构都是开源的。 |
| C、PHP
| HotCrawler | /
| /
| 一个使用 C 语言和 php 编写的爬虫。 |
| /
| ViREL Microformats Crawler | /
| /
| 搜索公众信息作为嵌入到网页的一小部分。 |
|
版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
|