私信本篇文章会有些长,但都是满满的干货,需要花费你十几分分钟的时间
网络爬虫是一种自动化程序或脚本,根据设定的数据爬取索引系统地爬取 Web 网页。整个过程称为 Web 数据采集(Crawling)或爬取(Spidering)。
人们通常将用于爬取的工具称为爬虫(Web Spider)、Web 数据抽取软件或 Web 网站采集工具。
当前 Web 爬取应用广受关注,一个重要的原因在于它们从多个方面上推进了业务的加速增长。这些应用非常便于在数据驱动的大环境中使用。它们从多个公开的网站采集信息和内容,并按统一可管理的方式提供。在这些应用的帮助下,我们可以一窥遍布全球的海量信息,例如新闻、社会媒体、图片、文章,甚至是竞争对手的情况。
为更好地采用各种爬取应用,我们需要做好调研,了解各种应用的不同功能和相同特性。我们将在本文中介绍多种不同的开源 Web 爬取软件库和工具。本文有助于读者实现爬取、采集网站数据并分析数据。
我们全面地总结了一些最好的开源 Web 爬取软件库和工具,并按实现语言的不同进行了分类。
Python 编写的开源 Web 爬虫
1. Scrapy
实现语言:Python
GitHub 星标数:28660
官方支持链接:https://scrapy.org/community/
简介
Scrapy 是一种高速的高层 Web 爬取和 Web 采集框架,可用于爬取网站页面,并从页面中抽取结构化数据。
Scrapy 的用途广泛,适用于从数据挖掘、监控到自动化测试。
Scrapy 设计上考虑了从网站抽取特定的信息,它支持使用 CSS 选择器和 XPath 表达式,使开发人员可以聚焦于实现数据抽取。
对于熟悉 Python 的开发人员,只需几分钟就能建立并运行 Scrapy。
支持运行在 Linux、Mac OS 和 Windows 系统上。
特性
内置支持从 HTML 和 XML 抽取数据、使用扩展的 CSS 选择器(Selector)和 XPath 表达式等特性。
支持以多种格式(JSON、CSV、XML)生成输出。
基于 Twisted 构建。
稳健的支持,自动检测编码方式。
快速,功能强大。
官方文档:https://docs.scrapy.org/en/latest/
官方网站:https://scrapy.org/
2. Cola
实现语言:Python
GitHub 星标数:1274
官方支持链接:https://scrapy.org/community/
简介
Cola 是一种高层分布式爬取框架,实现从网站爬取网页,并从中抽取结构化数据。
它提供了一种实现目标数据获取的简单且灵活的方式。
用户只需要编写其中一部分代码,就可在本地和分布式环境下运行。
特性
高层分布式爬取框架。
简单且高速。
灵活。
官方文档:https://github.com/chineking/cola
官方网站:https://pypi.org/project/Cola/
3. Crawley
实现语言 Python
GitHub 星标数: 144
官方支持链接:https://scrapy.org/community/
简介
Crawley 是一种 Python 爬取和采集框架,意在简化开发人员从 Web 网页抽取数据到数据库等结构化存储中。
特性
基于 Eventlet 构建的高速 Web 爬虫。
支持 MySQL、PostgreSQL、Oracle、Sqlite 等关系数据库引擎。
支持 MongoDB、CouchDB 等 NoSQL 数据库(最新特性!)。
支持导出数据为 JSON、XML 和 CSV 格式(最新特性!)。
命令行工具。
支持开发人员使用自己喜好的工具,例如 XPath 或 Pyquery(一种类似于 JQuery 的 Python 软件库)等。
支持 Cookie 处理器(Handler)。
官方文档:https://pythonhosted.org/crawley/
官方网站:http://project.crawley-cloud.com/
4. MechanicalSoup
实现语言: Python
GitHub 星标数: 2803
官方支持链接:https://scrapy.org/community/
简介
MechanicalSoup 是一种设计模拟人类使用 Web 浏览器行为的 Python 软件库,它基于解析软件库 BeautifulSoup 构建。
如果开发人员需要从单个站点采集数据,或是不需要大量数据采集,那么使用 MechanicalSoup 是一种简单高效的方法。
MechanicalSoup 自动存储和发送 Cookie、跟踪重定向、支持链接跟随和提交表单。
特性
轻量级。
支持 Cookie 处理器。
官方文档: https://mechanicalsoup.readthedocs.io/en/stable/
官方网站:https://mechanicalsoup.readthedocs.io/
5. PySpider
实现语言: Python
GitHub 星标数: 11803
官方支持链接:https://scrapy.org/community/
简介
PySpider 是一种 Python 编写的强大 Web 爬虫。
它支持 JavaScript 网页,并具有分布式架构。
PySpider 支持将爬取数据存储在用户选定的后台数据库,包括 MySQL, MongoDB, Redis, SQLite, Elasticsearch 等。
支持开发人员使用 RabbitMQ、Beanstalk 和 Redis 等作为消息队列。
特性
提供强大 Web 界面,具有脚本编辑器、任务监控、项目管理器和结果查看器。
支持对重度 Ajax 网站的爬取。
易于实现适用、快速的爬取。
官方文档: http://docs.pyspider.org/
官方网站:https://github.com/binux/pyspider
6. Portia
实现语言: Python
GitHub 星标数: 6250
官方支持链接:https://scrapy.org/community/
简介
Portia 是由 Scrapinghub 创建的一种可视化爬取工具,它不需要用户具有任何程序开发知识。
如果用户并非开发人员,最好直接使用 Portia 实现 Web 爬取需求。
用户无需任何安装就可免费试用 Portia,只需要在 Scrapinghub 注册一个账户,就可使用托管版本。
即便用户没有编程技能,在 Portia 中创建爬虫并抽取 Web 内容也是非常易于实现的。
用户无需安装任何程序,因为 Portia 是运行在 Web 页面上的。
用户可以使用 Portia 的基本点击工具标注需要爬取的数据,然后 Portia 就会根据这些标注理解如何爬取类似页面中的数据。
一旦检测到需要爬取的页面,Portia 会形成一个用户已创建结构的实例。
特性
通过记录并回放用户在页面上的操作,实现点击、拖动和等待等动作。
Portia 可以很好地爬取基于 Ajax 构建的网站(基于 Splash),也适用于爬取 Backbone、Angular 和 Ember 等重度 JavsScript 框架。
官方文档:https://portia.readthedocs.io/en/latest/index.html
官方网站: https://github.com/scrapinghub/portia
7. Beautifulsoup
实现语言: Python
官方支持链接:https://scrapy.org/community/
简介
Beautiful Soup 一种设计用于实现 Web 爬取等快速数据获取项目的 Python 软件库。
它在设计上处于 HTML 或 XML 解析器之上,提供用于迭代、搜索和修改解析树等功能的 Python 操作原语。往往能为开发人员节省数小时乃至数天的工作。
特性
Beautiful Soup 自动将输入文档转换为 Unicode 编码,并将输出文档转换为 UTF-8 编码。
Beautiful Soup 处于一些广为采用的 Python 解析器(例如,lxml 和 html5lib)之上,支持用户尝试使用多种不同的解析策略,并在速度和灵活性上做出权衡。
官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/
官方网站: https://www.crummy.com/software/BeautifulSoup/
8. Spidy 爬虫
实现语言: Python
GitHub 星标数: 152
官方支持链接:https://scrapy.org/community/
简介
Spidy 是一种从命令行运行的 Web 爬虫。易于使用。用户只需提供 Web 网页的 URL 链接,Spidy 就可以开始爬取!Spidy 无疑是一种整体爬取 Web 的简单有效的方式。
Spidy 使用 Python 请求查询 Web 页面,并使用 lxml 抽取页面中的所有链接。非常简单!
特性
错误处理。
跨平台兼容性。
频繁时间戳日志。
可移植性。
用户友好的日志。
保存 Web 页面。
支持文件压缩。
官方文档:https://github.com/rivermont/spidy
官方网站: http://project.crawley-cloud.com/
9. Garb
实现语言: Python
GitHub 星标数: 1627
官方支持链接:https://scrapy.org/community/
简介
Grab 是一种用于构建爬虫的 Python 框架。
使用 Grab 可构建出各种复杂度的 Web 爬虫,从只有五行代码的脚本,到可处理百万量级 Web 页面的复杂异步爬虫。
Grab 提供了执行网络请求、处理接收内容的 API。例如,实现与 HTML 文档的 DOM 树进行交互。
特性
支持 HTTP 和 SOCKS 代理,可使用也可不使用认证。
自动字符集检测。
强大的 API,支持使用 XPath 查询从 HTML 文档的 DOM 树中抽取数据。
自动 Cookie(或会话)支持。
官方文档:https://grablib.org/en/latest/
官方网站: https://github.com/lorien/grab
Java 编写的开源 Web 爬虫
10. Apache Nutch
实现语言: Java
GitHub 星标数: 1743
官方支持链接:https://wiki.apache.org/nutch/HelpContents
简介
Apache Nutch 是一种高度可扩展、可伸缩的开源 Web 爬虫软件项目。
如果要列出最好的开源 Web 爬虫列表,Apache Nutch 无疑金榜题名。
作为一种用于数据挖掘的高度可扩展、可伸缩的开源代码 Web 数据抽取软件项目,Apache Nutch 得到了广泛的使用。
Nutch 支持单机运行,但是在 Hadoop 集群上运行可最大化地发挥其强大能力。
全球范围内很多数据分析人员和科研人员、应用开发人员和 Web 文本挖掘工程师都在使用 Apache Nutch。
Apache Nutch 是一种 Java 编写的跨平台解决方案。
特性:
默认情况下,爬取数据和分析数据是独立的过程。广泛支持多种文档格式,包括纯文本、HTML/XHTML+XML、XML、PDF、ZIP 等。使用 XPath 和命名空间实现映射。通过 Hadoop 支持分布式文件系统。链接图形式的数据库。支持 NTLM 认证。
官方文档: https://wiki.apache.org/nutch/
官方网站: http://nutch.apache.org/
11. Heritrix
实现语言: JavaGitHub
星标数: 1236
官方支持链接:https://github.com/internetarchive/heritrix3/issues
简介:
在使用 Java 编写的免费开源 Web 爬虫中,Heritrix 是其中一种得到广泛使用的工具。事实上,它是一种可扩展、Web 规模、存档质量(archival-quality)的 Web 爬取项目。Heritrix 是一种扩展能力和性能很好的解决方案,支持用户即刻爬取并归档一组网站。此外,它在设计上考虑了 robots.txt 禁止规则和 META 机器人标签。Heritrix 可运行在 Linux/Unix 和 Windows 系统上。
特性:
HTTP 认证。NTLM 认证。链接抽取中的 XSL 转换。独立于搜索引擎。是一种成熟并稳定的平台。高度可配置。支持在任一机器上运行。
官方文档: https://github.com/internetarchive/heritrix3/wiki/Heritrix%203.0%20and%203.1%20User%20Guide
官方网站: https://github.com/internetarchive/heritrix3b
12. ACHE 爬虫
实现语言: JavaGitHub
星标数: 154
官方支持链接:https://gitter.im/ViDA-NYU/ache
简介:
ACHE 是一种专用于特定用途的 Web 爬虫。ACHE 爬取满足特定标准的 Web 页面。例如,属于特定领域并包含用户指定模式的页面。不同于通用爬虫,ACHE 使用页面分类器遴选特定领域中的相关和无关页面。页面分类器可以是基本的正则表达式(例如,匹配所有包含给定单词的页面),也可以基于机器学习的分类模型。ACHE 也可以自动学习如何对链接做优先处理,实现高效地定位相关内容,避免检索无关的页面内容。
特性:
对固定网站列表的正常爬取。通过自动链接优先处理,发现并爬取新的相关网站。可配置不同类型的页面分类器(例如,机器学习、正则表达式等)。持续重新爬取站点,实现页面更新的发现。使用 ElasticSearch 对爬取页面做索引。实时搜索爬取页面的 Web 接口。用于监控爬虫的 REST API 和基于 Web 的用户接口。使用 TOR 代理爬取隐含服务。
官方文档: http://ache.readthedocs.io/en/latest/
官方网站: https://github.com/ViDA-NYU/ache
13. Crawler4j
实现语言: JavaGitHub
星标数: 3039
官方支持链接:https://github.com/yasserg/crawler4j/issues
简介:
crawler4j 是一种 Java 编写的开源 Web 爬虫,提供了爬取 Web 网站的基本接口。开发人员可以使用 crawler4j 在数分钟内建立一个多线程 Web 爬虫。
官方文档: https://github.com/yasserg/crawler4j
官方网站: https://github.com/yasserg/crawler4j
14. Gecco
实现语言: JavaGitHub
星标数: 1245
官方支持链接:https://github.com/xtuhcy/gecco/issues
简介:
Gecco 是一种使用 Java 开发的轻量级 Web 爬虫,易于使用。Gecco 集成了 jsoup、httpclient、fastjson、spring、htmlunit、redission 等优秀框架。用户只需要配置一系列 jQuery 风格选择器,就能很快地建立一个爬虫。Gecco 框架具有优秀的扩展能力。框架基于一些开放式和封闭式设计原则,对改进封闭,对扩展开放。
特性:
易于使用,使用 jQuery 风格选择器抽取元素。支持页面中的异步 Ajax 请求。支持页面 JavaScript 变量抽取。使用 Redis 实现分布式爬取(参见 gecco-redis 文档)。支持使用 Spring 开发业务逻辑(参见 gecco-spring 文档)。支持 htmlunit 扩展(参见 gecco-htmlunit 文档)。支持多种扩展机制。支持下载 UserAgent 的随机选择。支持下载代理服务器的随机选取。
官方文档: https://github.com/xtuhcy/gecco
官方网站: https://github.com/xtuhcy/gecco
15. BUbiNG
实现语言: JavaGitHub
星标数:24
官方支持链接:https://github.com/LAW-Unimi/BUbiNG/issues
简介:
BUbiNG 令人惊喜,它可称为下一代的开源 Web 爬虫。BUbiNG 是一种 Java 开发的完全分布式爬虫(无需中央协调),每秒可爬取数千个网页,并支持采集大规模数据集。BUbiNG 的分布式是基于高速协议实现的,因此可以获得非常高的通量。BUbiNG 提供对海量数据的大规模爬取。它完全可配置、易于扩展,并可集成垃圾信息检测。
特性:
高度并行。完全分布式。使用 JAI4J。JAI4J 是一种基于 JGroups 实现的瘦功能层,实现任务指派。(当前)使用剥离网页的指纹,检测近似的重复内容。快速。大规模爬取。
官方文档: http://law.di.unimi.it/software/bubing-docs/index.html
官方网站: http://law.di.unimi.it/software.php#bubing
16. Narconex
实现语言:Java
官方支持链接:https://github.com/norconex/collector-http/issues
简介:
对于寻求可满足企业级需求的开源 Web 爬虫的用户而言,Narconex 是一种很好的工具。Norconex 支持用户爬取任何 Web 内容。用户可以独立运行这种全功能数据采集器,或是将其集成在自己的应用中。支持所有操作系统。可在具有一般容量的单体服务器上爬取数百万信息。此外,Narconex 提供多种内容和元数据操作特性,还可以抽取页面中特定的图像。
特性:
多线程。支持按各种计划任务,抽取不同时间段的数据。从 HTML、Word、PDF 等多种文件格式中抽取文本内容。抽取文档相关的元数据。支持抽取使用用 JavaScript 渲染的页面。检测语言。支持翻译。可配置爬取速度。可检测发生修改或已被删除的文档。支持使用外部命令分析或操作文档。
官方文档: http://www.norconex.com/collectors/collector-http/getting-started
官方网站: http://www.norconex.com/collectors/collector-http/
17. WebSPHINX
实现语言: Java
当前尚不提供官方支持。
简介:
WebSphinix 是一种非常易于使用的可定制 Web 爬虫。它设计用于高级 Web 用户和 Java 编程人员,支持他们自动爬取小部分 Web。WebSphinix 数据抽取解决方案也提供了一种全面的 Java 类库和交互式软件开发环境。WebSphinix 包括两部分:爬虫基准测试(Crawler Workbench),WebSPHINX 类库。爬虫基准测试提供了很好的用户图形接口,支持用户配置并控制定制的 Web 爬虫。WebSPHINX 类库为使用 Java 编写 Web 爬虫提供支持。WebSphinix 支持运行在 Windows、Linux、Mac 和 Android IOS 上。
特性:
以图的方式可视化 Web 页面采集。将多个页面组合为单个文档,以供查看和打印。支持抽取所有满足设定模式的文本。支持 HTML 解析。支持 robot.txt 禁止标准。通用 HTML 转换。多线程 Web 页面检索。
官方文档: https://www.cs.cmu.edu/~rcm/websphinx/doc/index.html
官方网站: https://www.cs.cmu.edu/~rcm/websphinx/#about
18. Spiderman
实现语言: JavaGitHub
星标数: 2400
官方支持链接:https://gitee.com/l-weiwei/spiderman/issues
简介:
Spiderman 是一种 Java 开源 Web 数据抽取工具。它采集特定的 Web 页面,并从中抽取有用数据。Spiderman 主要使用 XPath 和正则表达式等技术抽取实际数据。
特性:
更高的性能。持久化集合状态。分布式。支持 JavaScript。
官方文档: https://gitee.com/l-weiwei/spiderman
官方网站: https://gitee.com/l-weiwei/spiderman
19. WebCollector :
实现语言: JavaGitHub
星标数: 1986
官方支持链接:https://github.com/CrawlScript/WebCollector/issues
简介:
WebCollector 是一种基于 Java 的开源 Web 爬虫框架。它为实现 Web 爬取功能提供了一下基本的接口。用户可以使用它在五分钟内建立起一个多线程爬虫。
特性:
快速。
官方文档: https://github.com/CrawlScript/WebCollector
官方网站: https://github.com/CrawlScript/WebCollector
20. Webmagic
实现语言: JavaGitHub
星标数: 6891
官方支持链接:https://groups.google.com/forum/#!forum/webmagic-java
简介:
WebMagic 是一种可扩展的爬虫框架。WebMagic 涵盖了爬虫的整个生命周期,包括下载、URL 管理、内容抽取和持久化。可用于简化一些特定爬虫的开发。
特性:
高度灵活的简单内核。提供实现 HTML 抽取的简单 API。使用 POJO 标注定制爬虫,无需配置。支持多线程和分布式。易于集成。
官方文档: http://webmagic.io/docs/en/
官方网站: https://github.com/code4craft/webmagic
21. StormCrawler
实现语言: JavaGitHub
星标数:437
官方支持链接:https://stackoverflow.com/questions/tagged/stormcrawler
简介:
StormCrawler 是一种基于 Apache Storm 构架分布式 Web 爬虫的开源 SDK。StormCrawler 为开发人员构建爬虫提供了软件库和一系列资源。StormCrawler 完全适用于以数据流提供需获取和解析的 URL 的情况,也非常适用于大规模递归性爬取,尤其是需要低延迟的情况。
特性:
可扩展。有弹性。低延迟。易于扩展。运行良好且高效。
官方文档: http://stormcrawler.net/docs/api/
官方网站: http://stormcrawler.net/
JavaScript 编写的开源 Web 爬虫
22. NodeCrawler
实现语言: JavaScriptGitHub
星标数: 3999
官方支持链接:https://gitter.im/node-crawler/discuss?utm_source=badge
简介:
NodeCrawler 是一种广为使用的 Web 爬虫,它基于 NodeJS 实现,具有非常快的爬取速度。Nodecrawler 非常适用于偏爱使用 JavaScript 编程或者致力于 JavaScript 项目的开发人员。其安装也非常简单。JSDOM 和 Cheerio(用于 HTML 解析)实现服务器端渲染。其中,JSDOM 更为稳定。
特性:
使用 Cheerio(默认)或 JSDOM 实现服务端 DOM 和自动 jQuery 插入。可配置池子规模和重试次数。控制爬取率限制。请求的优先队列。支持 forceUTF8 模式,使得爬虫可以检测并转换字符集。与 4.x 乃至更新版本兼容。
官方文档:https://github.com/bda-research/node-crawler
官方网站:http://nodecrawler.org/
23. Simplecrawler
实现语言: JavaScriptGitHub
星标数:1764
官方支持链接:https://github.com/simplecrawler/simplecrawler/issues
简介:
Simplecrawler 设计提供基本的、灵活且稳定的网站爬取 API。Simplecrawler 在实现上考虑了针对特大型 Web 站点的归档、分析和搜索。它可爬取上百万页面,并毫无问题地向磁盘写入数十 GB 数据。
特性:
提供了用于自动检测链接资源的一些简单逻辑,用户可自行替换和添加。自动请求任何 robots.txt 禁止规则。具有灵活的队列系统,可在磁盘上冻结和解冻。
官方文档: https://github.com/simplecrawler/simplecrawler
官方网站: https://www.npmjs.com/package/simplecrawler
24. Js-crawler :
实现语言: JavaScriptGitHub
星标数: 167
官方支持链接:https://github.com/antivanov/js-crawler/issues
简介:
使用 NodeJS 实现的 Web 爬虫,支持 HTTP 和 HTTPS
官方文档: https://github.com/antivanov/js-crawler
官方网站: https://github.com/antivanov/js-crawler
25. Webster
实现语言: JavaScriptGitHub
星标数: 201
官方支持链接:https://github.com/zhuyingda/webster/issues
简介:
Webster 是一种使用 NodeJS 编写的可靠 Web 爬取和采集框架,用于爬取 Web 站点并从页面中抽取结构化数据。与其他爬取框架的不同之处在于,Webster 可以抓取浏览器客户端的 JavaScript 和 Ajax 请求呈现的内容。
官方文档: http://webster.zhuyingda.com/
官方网站: https://github.com/zhuyingda/webster
26. Node-osmosis
实现语言:JavaScriptGitHub
星标数: 3630
官方支持链接:https://github.com/rchipka/node-osmosis/issues
简介:
一种使用 NodeJS 实现的 HTML/XML 解析器和 Web 爬虫。
特性:
使用原生 libxml 的 C 绑定。干净的 Promise 类接口。支持 CSS 3.0 和 XPath 1.0 选择器的混合。Sizzle 选择器、Slick 选择器以及更多。不具有像 jQuery、cheerio 或 jsdom 那样的大型依赖。构成深度和复杂的数据结构。
HTML 解析器特性:快速解析;高速搜索;内存占用小。
HTML DOM 特性:加载和搜索 ajax 内容;DOM 交互和事件;执行嵌入和远程脚本;在 DOM 中执行代码。
HTTP 请求特性:日志记录 URL,重定向和错误;Cookie 的 jar 包,以及自定义 Cookie/ 头部 / 用户代理;登录 / 表单提交、会话 Cookie,基本的认证;单代理、多代理,处理代理失败情况;限制重试和重定向。
官方文档: https://rchipka.github.io/node-osmosis/global.html
官方网站: https://www.npmjs.com/package/osmosis
27. Supercrawler
实现语言:JavaScriptGitHub
星标数: 4341
官方支持链接:https://github.com/brendonboshell/supercrawler/issues
简介:
Supercrawler 是一种使用 NodeJS 实现的 Web 爬虫,在设计上支持高度可配置和易用性。一旦成功爬取一个网页(可以是图像、文本文档或其他任何文件),Supercrawler 将会触发用户自定义的内容类型(content-type)处理器,处理页面解析、保存数据以及其它一些用户定义的功能。
特性:
链接检测:Supercrawler 会解析所爬取的 HTML 文档,识别其中链接并添加到队列中。
机器人解析:在爬取前 Supercrawler 会请求 robots.txt 并检查其中的禁止规则。它也可识别站点地图。
站点地图解析:Supercrawler 可以从 XML 站点地图文件中读取链接,并将链接添加到队列中。
并发限制:Supercrawler 可限制在任一时间发出的请求数。
速率限制:Supercrawler 可添加请求的时延,以免对服务器产生轰炸。
指数补偿(Exponential backoff)重试:Supercrawler 将依此在一小时、两小时、四小时乃至更多时间后重试请求。要使用该特性,爬取队列必须使用数据库或 Redis 作为后端。
主机名均衡:Supercrawler 可在不同主机名间平均分割请求量。要使用该特性,爬取队列必须以 Redis 为后端。
官方文档: https://github.com/brendonboshell/supercrawler
官方网站: https://github.com/brendonboshell/supercrawler
28. Web scraper 的 Chrome 扩展
实现语言:JavaScriptGitHub
星标数: 775
官方支持链接:https://forum.webscraper.io/
简介:
Web Scraper 是一种 Chrome 浏览器扩展,构建用于从 Web 页面抽取数据。用户可以使用该扩展创建计划(站点地图),定义如何遍历一个 Web 网站,以及如何从中抽取数据。Web Scraper 使用站点地图相应地遍历网站,并从中抽取数据。支持以 CSV 格式导出所抽取的数据。
特性:
抽取多个页面。
站点地图和抽取的数据存储在浏览器的本地存储,也可存储在 CouchDB 中。
多种数据类型选取。
支持从动态网页(JavaScript+AJAX)抽取数据。
浏览抽取的数据。
以 CSV 格式导出抽取的数据。
导入、导出站点地图。
只依赖于 Chrome 浏览器。
官方文档: https://www.webscraper.io/documentation
官方网站: https://www.webscraper.io
29. Headless Chrome 爬虫
实现语言:JavaScriptGitHub
星标数: 3256
官方支持链接:https://github.com/yujiosaka/headless-chrome-crawler/issues
简介:
使用基本 HTML 文件请求的爬虫,通常速度很快。但这样的爬虫往往会抽取到空白内容,尤其是在爬取使用 AngularJS、React 和 Vue.js 等现代前端框架构建的网站时。
特性:
分布式爬取。
可配置并发、延迟和重试。
支持深度优先搜索和广度优先搜索算法。
支持插拔缓存存储,例如 Redis。
支持导出 CSV 和 JSON。
在达到最大请求时暂停爬取,并可在任一时刻恢复。
自动插入用于抽取的 jQuery。
保存屏幕截图,用于证实爬取过程。
模拟设备和用户代理。
具有优先队列,可提高爬取效率。
官方文档: https://github.com/yujiosaka/headless-chrome-crawler/blob/master/docs/API.md
官方网站: https://github.com/yujiosaka/headless-chrome-crawler
30. X-ray
实现语言:JavaScriptGitHub
星标数: 4464
官方支持链接:https://github.com/matthewmueller/x-ray/issues
特性:
模式灵活:支持字符串、数组、对象以及嵌套对象结构。
模式并非绑定于所抽取的页面结构,支持用户获取选定结构中的数据。
可组合(Composable):API 是完全可组合的,赋予用户抽取每个页面的极大灵活性。
分页支持:爬取页面在 Web 站点上的所有分页。
X-ray 还支持请求延迟和分页限制,并支持将爬取页面导入到单个文件中。这样一旦单个页面产生错误,用户不会失去所有已爬取的数据。
爬虫支持:从一个页面开始,轻易跳转另一个页面。页面跳转是可预测的,按深度优先爬取所有页面。
负责任的爬取:X-ray 支持并发、限制、延迟、超时和限制,实现负责任地爬取任何页面。
可插拔驱动:可按用户需求置换不同的爬虫。
官方文档: https://github.com/matthewmueller/x-ray
官方网站: https://www.npmjs.com/package/x-ray-scraper
C 编写的开源 Web 爬虫
31. Httrack
实现语言:CGitHub
星标数: 747
官方支持链接:http://forum.httrack.com/
简介:
HTTracks 是一项免费(GPL、Libre/ 自由软件)且易于使用的离线浏览器功能。支持用户将 Web 站点下载到本地目录,递归构建全部目录,以及获取 HTML、图像和其它文件到本地计算机。HTTrack 会维持原站点的相对链接结构。用户可以用浏览器打开本地的“镜像”页面,并逐个链接浏览,与在线浏览无异。HTTrack 也支持对已有镜像站点的更新,以及从中断点恢复下载。HTTrack 高度可配置,并提供帮助文档。
特性:
多语言窗口,提供对 Linux/UNIX 的接口。
镜像单个站点,或是一并镜像多个站点。
支持按文件类型、链接位置、结构深度、文件大小过滤,接受或拒绝站点或文件名。
支持代理,可最大化速度,并可选认证。
官方文档: http://www.httrack.com/html/index.html
官方网站: http://www.httrack.com/
32. GNU Wget
实现语言:CGitHub
星标数: 22
官方支持链接:https://github.com/chineking/cola/issues
简介:
GNU Wget 是一种免费软件包,它使用 HTTP、HTTPS、FTP、FTPS 等广为使用的互联网协议检索文件。Wget 是一种非交互式命令行工具,易于从脚本、Cron 任务、不具有 X 窗口支持的终端等处调用。
特性:
使用 REST 和 RANGE 支持从中断处恢复下载。
基于 NLS 的消息文件,可使用多种语言。
可运行于大多数类 UNIX 操作系统上,也支持 Windows.支持 HTTP 代理。
支持 HTTP Cookie。
官方文档: https://www.gnu.org/software/wget/manual/
官方网站: https://www.gnu.org/software/wget/
C++ 编写的开源 Web 爬虫
33. gigablast
实现语言:C++GitHub
星标数: 912
官方支持链接:https://github.com/gigablast/open-source-search-engine/issues
简介:
Gigablast 是一种开源的 Web 和企业搜索引擎,也是一种爬虫。Gigablast 是自身维护数十亿页面检索索引的数家美国搜索引擎之一。
特性:
大规模。高性能。实时信息检索技术。
官方文档: http://www.gigablast.com/api.html
官方网站: http://www.gigablast.com/
C# 编写的开源 Web 爬虫
34. Arachnode.net
实现语言:C#GitHub
星标数: 9
官方支持链接:http://arachnode.net/forums/
简介:
Arachnode.net 适用于寻求开源 Web 爬虫的 C# 开发人员。Arachnode.net 软件类库从因特网下载内容、对内容做索引,并对过程做定制。用户可使用该工具做个人内容聚合,也可用于将下载的内容抽取、采集和解析为多个表单。Arachnode.net 索引所发现的内容,并存储在 Lucene.NET 索引中。Arachnode.net 非常适用于文本挖掘,也适用于学习高级爬取技术。
特性:
可配置规则和行为。
集成 Lucene.NET。
支持 SQL Server 和全文本索引。
支持对.DOC/.PDF/.PPT/.XLS 等文件类型的索引。
支持将 HTML 转化为 XML 和 XHTML。
支持全部 JavaScript/AJAX 功能。
支持多线程和节流 (Throttling)。
行为适当(Respectful)的爬取。
分析服务。
官方文档: https://documentation.arachnode.net/index.html
官方网站: http://arachnode.net/
35. Abot
实现语言:C#GitHub
星标数: 1392
官方支持链接:https://groups.google.com/forum/#!forum/abot-web-crawler
简介:
Abot 是一种 C# 实现的开源 Web 爬虫,主要侧重于速度和灵活性。Abot 在实现中考虑了底层技术细节,包括多线程、HTTP 请求、调度、链接解析等。用户只需注册事件,就可以处理分页数据。支持用户插入自己的核心接口实现,实现对整个爬取过程的完全控制。
特性:
高速!易于定制(可插拔架构,支持用户定义爬取内容和方式)。
经过大量的单元测试(高代码覆盖率)。
非常轻量级(并非过度工程化)。
无过程之外的依赖,例如对数据库、所安装服务等的依赖。
官方文档: https://github.com/sjdirect/abot
官方网站: https://github.com/sjdirect/abot
36. Hawk
实现语言:C#GitHub
星标数: 1875
官方支持链接:https://github.com/ferventdesert/Hawk/issues
简介:
HAWK 无需用户做任何编程,提供图形可视化数据获取和清理工具,并以 GPL 协议开源。
特性:
无需编程,即可实现对 Web 内容的智能分析。
所见即所得(WYSIWYG),可视化拉拽,支持对数据转换和过滤等的快速处理。
支持从多种数据库和文件中导入和导出。
任务可保存并可重用。
尤其适用于爬取和数据清理,但其功能并不仅局限于此。
官方文档: https://github.com/ferventdesert/Hawk
官方网站: https://ferventdesert.github.io/Hawk/
37. SkyScraper
实现语言:C#GitHub
星标数: 39
官方支持链接:https://github.com/JonCanning/SkyScraper/issues
简介:
一种异步 Web 获取和爬虫,使用了 async/await 和响应式扩展。
官方文档: https://github.com/JonCanning/SkyScraper
官方网站: https://github.com/JonCanning/SkyScraper
.NET 编写的 Web 爬虫
38. DotnetSpider
实现语言:.NETGitHub
星标数: 1382
官方支持链接:https://github.com/dotnetcore/DotnetSpider/issues
简介:
DotnetSpider 是一种使用.NET Standard 实现的 Web 爬取软件库,类似于 WebMagic 和 Scrapy。
它是一种适用于.NET 的轻量级、高效和高速的高层 Web 爬取和获取框架。
官方文档: https://github.com/dotnetcore/DotnetSpider/wiki
官方网站: https://github.com/dotnetcore/DotnetSpider
PHP 编写的开源 Web 爬虫
39. Goutte
实现语言:PHPGitHub
星标数: 6574
官方支持链接:https://github.com/FriendsOfPHP/Goutte/issues
简介:
Goutte 是一种 PHP 实现的屏幕抓取和 Web 爬取软件库。
Goutte 为爬取 Web 站点和从 HTML/XML 响应中抽取数据提供了很好的 API。
官方文档: https://goutte.readthedocs.io/en/latest/
官方网站: https://github.com/FriendsOfPHP/Goutte
40. Dom-crawler
实现语言:PHPGitHub
星标数: 1340
官方支持链接:https://github.com/symfony/symfony/issues
简介:
DomCrawler 组件简化了对 HTML 和 XML 文档的 DOM 浏览。
官方文档: https://symfony.com/doc/current/components/dom_crawler.html
官方网站: https://github.com/symfony/dom-crawler
41. Pspider
实现语言:PHPGitHub
星标数: 249
官方支持链接:https://github.com/hightman/pspider/issues
简介:
Pspider 是最近完全使用 PHP 实现的一种并行爬取框架,它基于 hightman/httpclient 组件。
官方文档: https://github.com/hightman/pspider
官方网站: https://github.com/hightman/pspider
42. Php-spider
实现语言:PHPGitHub
星标数: 1023
官方支持链接:https://github.com/mvdbos/php-spider/issues
简介:
一种可配置、可扩展的 Web 爬虫。
特性:
可限制爬取深度、队列大小和最大下载数。
支持基于 XPath、CSS 选择器或普通(Plain old)PHP 添加自定义的 URI 发现逻辑。
提供了一系列有用的 URI 过滤器,例如域限制等。
收集爬取统计信息,用于形成报告。
官方文档: https://github.com/mvdbos/php-spider
官方网站: https://github.com/mvdbos/php-spider
43. Spatie / Crawler
实现语言:PHPGitHub
星标数: 740
官方支持链接:https://github.com/spatie/crawler/issues
简介:
该软件包提供了从 Web 站点爬取链接的类。
在实现的底层机制上,使用了 GuzzleHttp/Promise 并发爬取多个 URL。
该爬虫支持执行 JavaScript,可以爬取使用 JavaScript 渲染的站点。
从实现的底层机制看,该特性使用了 Chrome 和 Puppeteer。
官方文档: https://github.com/spatie/crawler
官方网站: https://github.com/spatie/crawler
Ruby 实现的开源 Web 爬虫
44. Mechanize
实现语言:RubyGitHub
星标数: 3728
官方支持链接:https://github.com/sparklemotion/mechanize/issues
简介:
Mechanize 软件库用于实现于 Web 站点的自动交互。
Mechanize 自动按重定向存储并发送 Cookie。
可以根据链接提交表单,支持填写和提交表单域。
Mechanize 也可跟踪用户访问过站点的历史记录。
官方文档: http://docs.seattlerb.org/mechanize/
官方网站: https://github.com/sparklemotion/mechanize
GO 编写的开源 Web 爬虫
45. Colly
实现语言:GoGitHub
星标数: 5439
官方支持链接:https://github.com/gocolly/colly/issues
简介:
为 Go 爱好者提供了一种快速且适用的爬取框架。Colly 提供了非常清晰的接口,可用于编写任何类型的爬虫和数据获取工具。Colly 使得用户可以轻易地从站点抽取结构化数据。这些数据适用于大范围的应用,例如数据挖掘、数据处理和归档。
特性:
清晰的 API。
高速(支持单核每秒处理一千次以上的请求)。
按域管理请求延迟和最大并发。
自动 Cookie 和会话管理。
同步 / 异步 / 并行爬取。
支持缓存。
对非 unicode 响应的自动编码。
支持 robots.txt 禁止规则。
分布式爬取。
可通过环境变量配置。
支持扩展。
官方文档: http://go-colly.org/docs/
官方网站: http://go-colly.org/
46. Gopa
实现语言:GoGitHub
星标数: 169
官方支持链接:https://github.com/infinitbyte/gopa/issues
特性:
轻量级,低资源占用,小于 100MB 的内存需求。
易于部署,无需任何运行时和依赖关系。
易于使用,不需要用户具有任何编程和脚本技能,提供开箱即可用特性。
官方文档: https://github.com/infinitbyte/gopa
官方网站: https://github.com/infinitbyte/gopa
47. Pholcus
实现语言:GoGitHub
星标数: 4341
官方支持链接:https://github.com/henrylee2cn/pholcus/issues
简介:
Pholcus 是一种完全使用 Go 语言实现的高并发性、重量级爬虫软件。它针对因特网数据采集,为只具有基本 Go 或 JavaScript 编程基础的用户提供了一种只需要关注自定义功能的特性。规则简单灵活,并发批处理任务,提供丰富的输出方式,包括 MySQL、MongoDB、Kafka、CSV、Exvel 等。用户共享了大量的演示。此外,Pholcus 支持两种水平和垂直爬取模式,支持模拟登陆、暂停任务、取消任务等一系列高级特性。
特性:
一种强大的爬取工具。
支持三种运行模式:单机、服务器和客户。
提供三种操作接口:Web、GUI 和命令行。
官方文档: https://pholcus.gitbooks.io/docs/
官方网站: https://github.com/henrylee2cn/pholcus
R 编写的开源 Web 爬虫
48. Rvest
实现语言:RGitHub
星标数: 969
官方支持链接:https://github.com/hadley/rvest/issues
简介:
Rvest 为用户从 Web 页面抽取信息提供帮助。
它在设计上使用了 magrittr 软件包,易于表达通用 Web 抽取。
官方文档: https://cran.r-project.org/web/packages/rvest/rvest.pdf
官方网站: https://github.com/hadley/rvest
Scala 编写的开源 Web 爬虫
49. Sparkler
实现语言: ScalaGitHub
星标数: 198
官方支持链接:https://github.com/USCDataScience/sparkler/issues
简介:
Web 爬虫是一种机器人程序,它从 Web 网站采集资源,用于构建搜索引擎、知识库等应用。Sparkler(“Spark-Crawler”的缩写)是一种新型的 Web 爬虫,它通过整合 Spark、Kafka、Lucene/Solr、Tika、pf4j 等多种 Apache 项目,使用了分布式计算和信息检索领域的最新进展。
特性:
提供更高的性能,具有更好的容错。
支持复杂和近实时分析。
实时输出数据流。
可扩展的插件框架。
通用解析器。
官方文档: http://irds.usc.edu/sparkler/dev/development-environment-setup.html#contributing-source
官方网站: http://irds.usc.edu/sparkler/
Perl 编写的开源 Web 爬虫
50. Web-scraper
实现语言:PerlGitHub
星标数: 91
官方支持链接:https://github.com/miyagawa/web-scraper/issues
简介:
Web Scraper 是一种使用 HTML、CSS 选择器或 XPath 表达式的 Web 采集工具集。
官方文档: https://github.com/miyagawa/web-scraper
官方网站: https://github.com/miyagawa/web-scraper
还有相关爬虫资料教程分享 需要的可以加我微信ssmp8858 备注:爬虫