作者:Prowebscraper 博客
摘要: 说起爬虫框架,你可能会马上脱口而出:「 Scrapy 或者 Pyspider」,甚至你可能认为只有 Python 才能爬虫。其实还有很多好用的开源爬虫框架,也绝不仅仅只有 Python 才能写爬虫,大多数热门语言都可以做。
总之,开源Web爬虫纷繁多样,下面按照所用程语言,罗列五十种最好的开源爬虫框架,每一个各具特长,适用于不同场景和用户需求。下面来一睹为快。
Python编写的开源Web爬虫
1. Scrapy
- 实现语言:Python
- GitHub Star 数:28660
- 官方支持链接
简介:
- 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 Star 数:1274
- 官方支持链接
简介:
- Cola是一种高层分布式爬取框架,实现从网站爬取网页,并从中抽取结构化数据。
- 它提供了一种实现目标数据获取的简单且灵活的方式。
- 用户只需要编写其中一部分代码,就可在本地和分布式环境下运行。
特性:
- 高层分布式爬取框架。
- 简单且高速。
- 灵活。
– 官方文档:https://github.com/chineking/cola
– 官方网站:https://pypi.org/project/Cola/
3. Crawley
- 实现语言 Python
- GitHub Star 数: 144
- 官方支持链接
简介:
- 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 Star 数: 2803
- 官方支持链接
简介:
- MechanicalSoup是一种设计模拟人类使用Web浏览器行为的Python软件库,它基于解析软件库BeautifulSoup构建。
- 如果开发人员需要从单个站点采集数据,或是不需要大量数据采集,那么使用MechanicalSoup是一种简单高效的方法。
- MechanicalSoup自动存储和发送Cookie、跟踪重定向、支持链接跟随和提交表单。
特性:
- 轻量级。
- 支持Cookie处理器。
– 官方文档: https://mechanicalsoup.readthedocs.io/en/stable/
– 官方网站:https://mechanicalsoup.readthedocs.io/
5. PySpider
- 实现语言: Python
- GitHub Star 数: 11803
- 官方支持链接
简介:
- 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 Star 数: 6250
- 官方支持链接
简介:
- 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
- 官方支持链接
简介:
- 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 Star 数: 152
- 官方支持链接
简介:
- 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 Star 数: 1627
- 官方支持链接
简介:
- 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 Star 数: 1743
- 官方支持链接
简介:
- 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
- 实现语言: Java
- GitHub Star 数: 1236
- 官方支持链接
简介:
- 在使用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爬虫
- 实现语言: Java
- GitHub Star 数: 154
- 官方支持链接
简介:
- 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
- 实现语言: Java
- GitHub Star 数: 3039
- 官方支持链接
简介:
- crawler4j是一种Java编写的开源Web爬虫,提供了爬取Web网站的基本接口。
- 开发人员可以使用crawler4j在数分钟内建立一个多线程Web爬虫。
– 官方文档: https://github.com/yasserg/crawler4j
– 官方网站: https://github.com/yasserg/crawler4j
14. Gecco
- 实现语言: Java
- GitHub Star 数: 1245
- 官方支持链接
简介:
- 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
- 实现语言: Java
- GitHub Star 数:24
- 官方支持链接
简介:
- 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
- 官方支持链接
简介:
- 对于寻求可满足企业级需求的开源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
- 实现语言: Java
- GitHub Star 数: 2400
- 官方支持链接
简介:
- Spiderman是一种Java开源Web数据抽取工具。它采集特定的Web页面,并从中抽取有用数据。
- Spiderman主要使用XPath和正则表达式等技术抽取实际数据。
特性:
- 更高的性能。
- 持久化集合状态。
- 分布式。
- 支持JavaScript。
- – 官方文档: https://gitee.com/l-weiwei/spiderman
– 官方网站: https://gitee.com/l-weiwei/spiderman
19. WebCollector :
- 实现语言: Java
- GitHub Star 数: 1986
- 官方支持链接
简介:
- WebCollector是一种基于Java的开源Web爬虫框架。
- 它为实现Web爬取功能提供了一下基本的接口。用户可以使用它在五分钟内建立起一个多线程爬虫。
特性:
- 快速。
– 官方文档: https://github.com/CrawlScript/WebCollector
– 官方网站: https://github.com/CrawlScript/WebCollector
20. Webmagic
- 实现语言: Java
- GitHub Star 数: 6891
- 官方支持链接
简介:
- WebMagic是一种可扩展的爬虫框架。
- WebMagic涵盖了爬虫的整个生命周期,包括下载、URL管理、内容抽取和持久化。
- 可用于简化一些特定爬虫的开发。
特性:
- 高度灵活的简单内核。
- 提供实现HTML抽取的简单API。
- 使用POJO标注定制爬虫,无需配置。
- 支持多线程和分布式。
- 易于集成。
– 官方文档: http://webmagic.io/docs/en/
– 官方网站: https://github.com/code4craft/webmagic
21. StormCrawler
- 实现语言: Java
- GitHub Star 数:437
- 官方支持链接
简介:
- StormCrawler是一种基于Apache Storm构架分布式Web爬虫的开源SDK。
- StormCrawler为开发人员构建爬虫提供了软件库和一系列资源。
- StormCrawler完全适用于以数据流提供需获取和解析的URL的情况,也非常适用于大规模递归性爬取,尤其是需要低延迟的情况。
特性:
- 可扩展。
- 有弹性。
- 低延迟。
- 易于扩展。
- 运行良好且高效。
– 官方文档: http://stormcrawler.net/docs/api/
– 官方网站: http://stormcrawler.net/
JavaScript编写的开源Web爬虫
22. NodeCrawler
- 实现语言: JavaScript
- GitHub Star 数: 3999
- 官方支持链接
简介:
- 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
- 实现语言: JavaScript
- GitHub Star 数:1764
- 官方支持链接
简介:
- Simplecrawler设计提供基本的、灵活且稳定的网站爬取API。
- Simplecrawler在实现上考虑了针对特大型Web站点的归档、分析和搜索。它可爬取上百万页面,并毫无问题地向磁盘写入数十GB数据。
特性:
- 提供了用于自动检测链接资源的一些简单逻辑,用户可自行替换和添加。
- 自动请求任何robots.txt禁止规则。
- 具有灵活的队列系统,可在磁盘上冻结和解冻。
– 官方文档: https://github.com/simplecrawler/simplecrawler
– 官方网站: https://www.npmjs.com/package/simplecrawler
24. Js-crawler :
- 实现语言: JavaScript
- GitHub Star 数: 167
- 官方支持链接)
简介:
- 使用NodeJS实现的Web爬虫,支持HTTP和HTTPS
– 官方文档: https://github.com/antivanov/js-crawler
– 官方网站: https://github.com/antivanov/js-crawler
25. Webster
- 实现语言: JavaScript
- GitHub Star 数: 201
- 官方支持链接
简介:
- Webster是一种使用NodeJS编写的可靠Web爬取和采集框架,用于爬取Web站点并从页面中抽取结构化数据。
- 与其他爬取框架的不同之处在于,Webster可以抓取浏览器客户端的JavaScript和Ajax请求呈现的内容。
– 官方文档: http://webster.zhuyingda.com/
– 官方网站: https://github.com/zhuyingda/webster
26. Node-osmosis
- 实现语言:JavaScript
- GitHub Star 数: 3630
- **官方支持链接
简介:
* 一种使用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
- 实现语言:JavaScript
- GitHub Star 数: 4341
- 官方支持链接
简介:
- 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扩展
- 实现语言:JavaScript
- GitHub Star 数: 775
- 官方支持链接
简介:
- 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爬虫
- 实现语言:JavaScript
- GitHub Star 数: 3256
- 官方支持链接
简介:
- 使用基本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
- 实现语言:JavaScript
- GitHub Star 数: 4464
- 官方支持链接
特性:
- 模式灵活:支持字符串、数组、对象以及嵌套对象结构。模式并非绑定于所抽取的页面结构,支持用户获取选定结构中的数据。
- 可组合(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
- 实现语言:C
- GitHub Star 数: 747
- 官方支持链接
简介:
- HTTracks是一项免费(GPL、Libre/自由软件)且易于使用的离线浏览器功能。
- 支持用户将Web站点下载到本地目录,递归构建全部目录,以及获取HTML、图像和其它文件到本地计算机。
- HTTrack会维持原站点的相对链接结构。用户可以用浏览器打开本地的“镜像”页面,并逐个链接浏览,与在线浏览无异。
- HTTrack也支持对已有镜像站点的更新,以及从中断点恢复下载。
- HTTrack高度可配置,并提供帮助文档。
特性:
- 多语言窗口,提供对Linux/UNIX的接口。
- 镜像单个站点,或是一并镜像多个站点。
- 支持按文件类型、链接位置、结构深度、文件大小过滤,接受或拒绝站点或文件名。
- 支持代理,可最大化速度,并可选认证。
– 官方文档: http://www.httrack.com/html/index.html
– 官方网站: http://www.httrack.com/
32. GNU Wget
- 实现语言:C
- GitHub Star 数: 22
- 官方支持链接
简介:
- 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 Star 数: 912
- **官方支持链接
简介:
- Gigablast是一种开源的Web和企业搜索引擎,也是一种爬虫。
- Gigablast是自身维护数十亿页面检索索引的数家美国搜索引擎之一。
特性:
- 大规模。
- 高性能。
- 实时信息检索技术。
– 官方文档: http://www.gigablast.com/api.html
– 官方网站: http://www.gigablast.com/
C#编写的开源Web爬虫
34. Arachnode.net
- 实现语言:C#
- GitHub Star 数: 9
- 官方支持链接
简介:
- 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 Star 数: 1392
- 官方支持链接
简介:
- Abot是一种C#实现的开源Web爬虫,主要侧重于速度和灵活性。
- Abot在实现中考虑了底层技术细节,包括多线程、HTTP请求、调度、链接解析等。
- 用户只需注册事件,就可以处理分页数据。
- 支持用户插入自己的核心接口实现,实现对整个爬取过程的完全控制。
特性:
- 高速!
- 易于定制(可插拔架构,支持用户定义爬取内容和方式)。
- 经过大量的单元测试(高代码覆盖率)。
- 非常轻量级(并非过度工程化)。
- 无过程之外的依赖,例如对数据库、所安装服务等的依赖。
– 官方文档: https://github.com/sjdirect/abot
– 官方网站: https://github.com/sjdirect/abot
36. Hawk
- 实现语言:C#
- GitHub Star 数: 1875
- 官方支持链接
简介:
- HAWK无需用户做任何编程,提供图形可视化数据获取和清理工具,并以GPL协议开源。
特性:
- 无需编程,即可实现对Web内容的智能分析。
- 所见即所得(WYSIWYG),可视化拉拽,支持对数据转换和过滤等的快速处理。
- 支持从多种数据库和文件中导入和导出。
- 任务可保存并可重用。
- 尤其适用于爬取和数据清理,但其功能并不仅局限于此。
– 官方文档: https://github.com/ferventdesert/Hawk
– 官方网站: https://ferventdesert.github.io/Hawk/
37. SkyScraper
- 实现语言:C#
- GitHub Star 数: 39
- 官方支持链接
简介:
- 一种异步Web获取和爬虫,使用了async/await和响应式扩展。
– 官方文档: https://github.com/JonCanning/SkyScraper
– 官方网站: https://github.com/JonCanning/SkyScraper
.NET编写的Web爬虫
38. DotnetSpider
- 实现语言:.NET
- GitHub Star 数: 1382
- 官方支持链接
简介:
- DotnetSpider是一种使用.NET Standard实现的Web爬取软件库,类似于WebMagic和Scrapy。
- 它是一种适用于.NET的轻量级、高效和高速的高层Web爬取和获取框架。
– 官方文档: https://github.com/dotnetcore/DotnetSpider/wiki
– 官方网站: https://github.com/dotnetcore/DotnetSpider
PHP编写的开源Web爬虫
39. Goutte
- 实现语言:PHP
- GitHub Star 数: 6574
- 官方支持链接
简介:
- Goutte是一种PHP实现的屏幕抓取和Web爬取软件库。
- Goutte为爬取Web站点和从HTML/XML响应中抽取数据提供了很好的API。
– 官方文档: https://goutte.readthedocs.io/en/latest/
– 官方网站: https://github.com/FriendsOfPHP/Goutte
40. Dom-crawler
- 实现语言:PHP
- GitHub Star 数: 1340
- 官方支持链接
简介:
- DomCrawler组件简化了对HTML和XML文档的DOM浏览。
– 官方文档: https://symfony.com/doc/current/components/dom_crawler.html
– 官方网站: https://github.com/symfony/dom-crawler
41. Pspider
- 实现语言:PHP
- GitHub Star 数: 249
- 官方支持链接
简介:
- Pspider是最近完全使用PHP实现的一种并行爬取框架,它基于hightman/httpclient组件。
– 官方文档: https://github.com/hightman/pspider
– 官方网站: https://github.com/hightman/pspider
42. Php-spider
- 实现语言:PHP
- GitHub Star 数: 1023
- 官方支持链接
简介:
- 一种可配置、可扩展的Web爬虫。
特性:
- 可限制爬取深度、队列大小和最大下载数。
- 支持基于XPath、CSS选择器或普通(Plain old)PHP添加自定义的URI发现逻辑。
- 提供了一系列有用的URI过滤器,例如域限制等。
- 收集爬取统计信息,用于形成报告。
– 官方文档: https://github.com/mvdbos/php-spider
– 官方网站: https://github.com/mvdbos/php-spider
43. Spatie / Crawler
- 实现语言:PHP
- GitHub Star 数: 740
- **官方支持链接
简介:
- 该软件包提供了从Web站点爬取链接的类。在实现的底层机制上,使用了GuzzleHttp/Promise并发爬取多个URL。
- 该爬虫支持执行JavaScript,可以爬取使用JavaScript渲染的站点。从实现的底层机制看,该特性使用了Chrome和Puppeteer。
– 官方文档: https://github.com/spatie/crawler
– 官方网站: https://github.com/spatie/crawler
Ruby实现的开源Web爬虫
44. Mechanize
- 实现语言:Ruby
- GitHub Star 数: 3728
- 官方支持链接
简介:
- Mechanize软件库用于实现于Web站点的自动交互。
- Mechanize自动按重定向存储并发送Cookie。可以根据链接提交表单,支持填写和提交表单域。
- Mechanize也可跟踪用户访问过站点的历史记录。
– 官方文档: http://docs.seattlerb.org/mechanize/
– 官方网站: https://github.com/sparklemotion/mechanize
GO编写的开源Web爬虫
45. Colly
- 实现语言:Go
- GitHub Star 数: 5439
- 官方支持链接
简介:
- 为Go爱好者提供了一种快速且适用的爬取框架。
- Colly提供了非常清晰的接口,可用于编写任何类型的爬虫和数据获取工具。
- Colly使得用户可以轻易地从站点抽取结构化数据。这些数据适用于大范围的应用,例如数据挖掘、数据处理和归档。
特性:
- 清晰的API。
- 高速(支持单核每秒处理一千次以上的请求)。
- 按域管理请求延迟和最大并发。
- 自动Cookie和会话管理。
- 同步/异步/并行爬取。
- 支持缓存。
- 对非unicode响应的自动编码。
- 支持robots.txt禁止规则。
- 分布式爬取。
- 可通过环境变量配置。
- 支持扩展。
– 官方文档: http://go-colly.org/docs/
– 官方网站: http://go-colly.org/
46. Gopa
- 实现语言:Go
- GitHub Star 数: 169
- 官方支持链接
特性:
- 轻量级,低资源占用,小于100MB的内存需求。
- 易于部署,无需任何运行时和依赖关系。
- 易于使用,不需要用户具有任何编程和脚本技能,提供开箱即可用特性。
– 官方文档: https://github.com/infinitbyte/gopa
– 官方网站: https://github.com/infinitbyte/gopa
47. Pholcus
- 实现语言:Go
- GitHub Star 数: 4341
- 官方支持链接
简介:
- 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
- 实现语言:R
- GitHub Star 数: 969
- 官方支持链接
简介:
- Rvest为用户从Web页面抽取信息提供帮助。它在设计上使用了magrittr软件包,易于表达通用Web抽取。
– 官方文档: https://cran.r-project.org/web/packages/rvest/rvest.pdf
– 官方网站: https://github.com/hadley/rvest
Scala编写的开源Web爬虫
49. Sparkler
- 实现语言: Scala
- GitHub Star 数: 198
- 官方支持链接
简介:
- 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
- 实现语言:Perl
- GitHub Star 数: 91
- 官方支持链接
简介:
- Web Scraper是一种使用HTML、CSS选择器或XPath表达式的Web采集工具集。
– 官方文档: https://github.com/miyagawa/web-scraper
– 官方网站: https://github.com/miyagawa/web-scraper
小结
以上罗列了 50 个不同编程语言下的不错爬虫框架/项目,感兴趣可以用用看。
英文原文: http://www.prowebscraper.com/blog/50-best-open-source-web-crawlers/
欢迎关注我的公众号:高级农民工,博客:高级农民工,阅读体验更好。