主流爬虫框架对比


目前的主流爬虫框架包括:

JAVA Python PHP C# C/C++
apache Nutch2 scraty phpspider DotnetSpider open-source-search-engine
webmagic Crawlery Beanbun NwebCrawler Cobweb
Heritriix Portia PHPCrawl SmartSpider upton
webCollector PySpider php seienium Abot wombat
crawler4j grab xNet Spidr
Spiderman cola AngleSharp Larbin
SeimiCrawler python seienium HtmlAgilityPack
jsoup CSQuery
java seienium
htmlmunit

一. Python

1. Scrapy

Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。但对于稍微复杂一点的页面,如 weibo 的页面信息,这个框架就满足不了需求了。

Scrapy使用了Twisted(其主要对手是Tornado)异步网络框架来处理网络通讯,该网络框架可以加快我们的下载速度,并且包含了各种中间件接口,可以灵活的完成各种需求。

优点:

1)scrapy 是异步的,可以灵活调节并发量

2)采取可读性更强的 xpath 代替正则,速度快

3)写 middleware,方便写一些统一的过滤器

4)同时在不同的 url 上爬行

5)支持 shell 方式,方便独立调试

6)通过管道的方式存入数据库,灵活,可保存为多种形式

缺点:

1)无法用它完成分布式爬取

2)自身去重效果差,消耗内存,且不能持久化

3)对于需要执行js才能获取数据的网页,爱莫能助

4)兼容了下载图片与视频,但是可用性比较差

5)自身扩展的log模块,不好用,经常需要自定义

6)基于 twisted 框架,运行中的 exception 是不会干掉 reactor(反应器),并且异步框架出错后 是不会停掉其他任务的,数据出错后难以察觉,预警系统简单的使用邮件,很不友好

scrapy的扩展件:

scrapy_redis解决分布式爬取;

scrapy_redis通过redis实现调度器的队列和指纹集合,完成分布式和去重。

scrapy_redis_bloomfilter,基于Redis的Bloomfilter去重,并将其扩展到Scrapy框架,实现持久化去重,上亿或十亿级别的去重功能。

scrapy-splash ,整合了javascript,可以在scrapy当中执行js,获取数据,解析。

2. Crawley

Crawley可以高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等。

crawley也是使用python开发出来的一款爬虫框架,该框架致力于改变人们从互联网中提取数据的方式,让大家可以更高效地从互联网中爬取对应内容。

crawley框架的主要特点有:

1)高速爬取对应网站内容

2)可以将爬取到内容轻松地存储到数据库中,比如:postgres,mysql,oracle,sqlite等数据库

3)可以将爬取到的数据导出为json,xml等格式

4)支持非关系型数据库,比如:mongodb,couchdb等

5)支持使用命令行工具

6)可以使用你喜欢的工具提取数据,比如使用xpath或者pyquery等工具

7)支持使用cookie登陆并访问哪些只有登陆才能够访问的网页

项目地址:http://project.crawley-cloud.com/

3. Portia

可视化爬取网站内容.

Portia是一个开源可视化爬虫工具,可让您在不需要任何编程知识的情况下爬取网站!简单地注释您感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据。

portia框架是一款允许没有任何编程基础的用户可视化地爬取网页的爬虫框架,给出你要爬取的网页中感兴趣的数据内容,通过portia框架,可以将你所需要的信息从相似的网页中自动提取出来。

项目地址:https://github.com/scrapinghub/portia

4. Newpaper

提取文章,新闻以及内容分析。

Newspaper可以用来提取新闻、文章和内容分析。使用多线程,支持10多种语言等。

newspaper框架是一种用来提取新闻、文章以及内容分析的python爬虫框架。更准确地说,newspaper是一个python的库,只不过这个库是由第三方开发的,可以归为一种框架。

newspaper框架在的主要特点:

1)比较简单

2)速度比较快

3)支持多线程

4)支持十多种语言

由此我们可以知道newspaper框架是轻量级框架,并且就爬取文章信息这一功能来说,使用起来很方便

项目地址:https://github.com/codelucas/newspaper

5. Python-goose

Java写的文章提取工具。Python-goose框架可提取的信息包括:文章主体内容、文章主要图片、文章中嵌入的任何Youtube/Vimeo视频、元描述、元标签。

6. pyspider

pyspider 是一个用python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优先级等。

主要特性如下:

1)强大的WebUI,包含:脚本编辑器、任务监控器,项目管理器和结果查看器;

2)多数据库支持,包括:MySQL, MongoDB, Redis, SQLite, Elasticsearch; PostgreSQL with SQLAlchemy等;

3)使用RabbitMQ, Beanstalk, Redis 和Kombu作为消息队列;

4)支持任务优先级设定、定时任务、失败后重试等;

5)支持分布式爬虫

6)完全可视化,对用户非常友好:WEB 界面编写调试脚本,起停脚本,监控执行状态,查看活动历史,获取结果产出。

缺点:

1)URL去重使用数据库而不是布隆过滤器,亿级存储的db io将导致效率急剧降低。

2)使用上的人性化牺牲了灵活度,定制化能力降低。

项目地址:https://github.com/binux/pyspider

7. grab

Grab是一个用于构建Web刮板的Python框架。借助Grab,您可以构建各种复杂的网页抓取工具,从简单的5行脚本到处理数百万个网页的复杂异步网站抓取工具。Grab提供一个API用于执行网络请求和处理接收到的内容,例如与HTML文档的DOM树进行交互。

项目地址:http://docs.grablib.org/en/latest/#grab-spider-user-manual

8.selenium

这是一个调用浏览器的 driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码

9.Cola

Cola是一个分布式的爬虫框架,对于用户来说,只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。

项目地址:https://github.com/chineking/cola

二. Java

常见的Java爬虫框架主要由有: Nutch、WebMagic、WebCollector、spider-flow、SeimiCrawler、heritrix3

1.Nutch

Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫,Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的.

Nutch这个框架运行需要Hadoop,Hadoop需要开集群

Apache顶级项目列表

Nutch官网

Nutch官方教程

1.Nutch支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外很吸引人的一点在于,它提供了一种插件框架,使得其对各种网页内容的解析、各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展,正是由于有此框架,使得 Nutch 的插件开发非常容易,第三方的插件也层出不穷,极大的增强了 Nutch 的功能和声誉。

缺点

1.Nutch的爬虫定制能力比较弱

2.WebMagic

WebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。

优点:

1)简单的API,可快速上手

2)模块化的结构,可轻松扩展

3)提供多线程和分布式支持

缺点:

1)不支持JS页面抓取

文档地址:http://webmagic.io/docs/zh/

3. Crawler4j

优点

1)多线程采集

2)内置了Url 过滤机制,采用的是BerkeleyDB 进行url的过滤。

3)可扩展为支持结构化提取网页字段,可作为垂直采集用

缺点

1)不支持动态网页抓取,例如网页的ajax部分

2)不支持分布式采集,可以考虑将其作为分布式爬虫的一部分,客户端采集部分

为了更加直观这7种爬虫框架,小编做了一个框架优缺点对比图,如下:

4.Heritrix

Heritrix 是一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源

优点

1)Heritrix的爬虫定制参数多

缺点

1)单实例的爬虫,之间不能进行合作。

2)在有限的机器资源的情况下,却要复杂的操作。

3)只有官方支持,仅仅在Linux上进行了测试。

4)每个爬虫是单独进行工作的,没有对更新进行修订。

5)在硬件和系统失败时,恢复能力很差。

6)很少的时间用来优化性能。

7)相对于Nutch,Heritrix仅仅只是一个爬虫工具,没有提供搜索引擎。如果要对抓取的站点排序必须要实现类似于Pagerank的复杂算法。

爬虫工具对比

三 、爬虫系统开源项目:

1.Spider-flow

spider-flows是一个爬虫平台,以图形化方式定义爬虫流程,无序代码即可实现一个爬虫(https://gitee.com/ssssssss-team/spider-flow)
spider-flow列表.png
spider-flow编辑.png

2.webmagic

webmagic 是一个无需配置 便于二次开发的爬虫框架, 他提供简单灵活的API ,只需要少量代码即可(https://gitee.com/flashsword20/webmagic)

文档链接地址:

http://webmagic.io/docs/zh/

3.ECommerceCrawlers

ECommerceCrawlers**实战多种网站、电商数据爬虫。包含:淘宝商品、微信公众号、大众点评、招聘网站、闲鱼、阿里任务、scrapy博客园、微博、百度贴吧、豆瓣电影、包图网、全景网、豆瓣音乐、某省药监局、搜狐新(https://gitee.com/AJay13/ECommerceCrawlers)**

4.Cecco

Cecco 是一款用java语言开发的轻量化的易用的网络爬虫, 整合了jsoup,httpClient,fastjson,spring,htmlunit,redission 等优秀框架


文章作者: zohar
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zohar !