- A+
Project |
Language |
Star |
Watch |
Fork |
Nutch |
Java |
1111 |
195 |
808 |
webmagic |
Java |
4216 |
618 |
2306 |
WebCollector |
Java |
1222 |
255 |
958 |
heritrix3 |
Java |
773 |
141 |
428 |
crawler4j |
Java |
1831 |
242 |
1136 |
Pyspider |
Python |
8581 |
687 |
2273 |
Scrapy |
Python |
19642 |
1405 |
5261 |
看到了吗?星星数排名第一的Scrapy比其他所有的加起来都要多,我仿佛听到他这样说:
开源框架大PK
各路英雄已经到齐了, PK现在开始!
优点:
Nutch支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外很吸引人的一点在于,它提供了一种插件框架,使得其对各种网页内容的解析、各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展。正是由于有此框架,使得 Nutch 的插件开发非常容易,第三方的插件也层出不穷,极大的增强了 Nutch 的功能和声誉。
Pyspider
介绍:
Pyspider是一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。
优点:
-
支持分布式部署。
-
完全可视化,对用户非常友好:WEB 界面编写调试脚本,起停脚本,监控执行状态,查看活动历史,获取结果产出。
-
简单,五分钟就能上手。脚本规则简单,开发效率高。
-
支持抓取JavaScript的页面。
总之,Pyspider非常强大,强大到更像一个产品而不是一个框架。
缺点:
-
URL去重使用数据库而不是布隆过滤器,亿级存储的db io将导致效率急剧降低。
-
使用上的人性化牺牲了灵活度,定制化能力降低。
结论
篇幅有限,就先选择这三个最有代表性的框架进行PK。他们都有远超别人的优点,比如:Nutch天生的搜索引擎解决方案、Pyspider产品级的WebUI、Scrapy最灵活的定制化爬取。也都各自致命的缺点,比如Scrapy不支持分布式部署,Pyspider不够灵活,Nutch和搜索绑定。究竟该怎么选择呢?
-
HTML, XML源数据选择及提取的原生支持。
-
提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了内置支持。
-
通过 feed导出 提供了多格式(JSON、CSV、XML),多存储后端(FTP、S3、本地文件系统)的内置支持。
-
提供了media pipeline,可以 自动下载 爬取到的数据中的图片(或者其他资源)。
-
高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来定制实现您的功能。
-
内置的中间件及扩展为下列功能提供了支持:
-
cookies and session 处理
-
HTTP 压缩
-
HTTP 认证
-
HTTP 缓存
-
user-agent模拟
-
robots.txt
-
爬取深度限制
-
针对非英语语系中不标准或者错误的编码声明, 提供了自动检测以及健壮的编码支持。
-
支持根据模板生成爬虫。在加速爬虫创建的同时,保持在大型项目中的代码更为一致。
-
针对多爬虫下性能评估、失败检测,提供了可扩展的 状态收集工具 。
-
提供 交互式shell终端 , 为您测试XPath表达式,编写和调试爬虫提供了极大的方便。
-
提供 System service, 简化在生产环境的部署及运行。
-
内置 Telnet终端 ,通过在Scrapy进程中钩入Python终端,使您可以查看并且调试爬虫。
-
Logging 为您在爬取过程中捕捉错误提供了方便。
-
支持 Sitemaps 爬取。
-
具有缓存的DNS解析器。
下一步
吹了半天的Scrapy,时间也到了,如果大家能够喜欢上它,学习的效率一定会成倍提升!下次我会为大家带来满满的干货,并完成更具挑战性的爬虫任务,我们下期再见!