手把手教你写网络爬虫(3):开源爬虫框架对比

手把手教你写网络爬虫(3)

作者:拓海

摘要:从零开始写爬虫,初学者的速成指南!

封面:

介绍

大家好!我们从今天开始学习开源爬虫框架Scrapy,如果你看过《手把手》系列的前两篇,那么今天的内容就非常容易理解了。细心的读者也许会有疑问,为什么不学出身名门的Apache顶级项目Nutch,或者人气飙升的国内大神开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度:


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

介绍:

Nutch是一个开源的Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和网络爬虫。

尽管搜索是上网的基本要求,但是现有的搜索引擎的数目却在下降。并且这很有可能进一步演变成为一个公司垄断了几乎所有的网页搜索为其谋取商业利益。这显然不利于广大Internet用户。

Nutch为我们提供了这样一个不同的选择。相对于那些商用的搜索引擎,Nutch作为开放源代码的搜索引擎将会更加透明,从而更值得大家信赖。现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为什么一个网页会排在一个特定的位置。除此之外, 有的搜索引擎依照网站所付的费用, 而不是根据它们本身的价值进行排序。与它们不同,Nutch没有什么需要隐瞒,也没有动机去扭曲搜索的结果。Nutch将尽自己最大的努力为用户提供最好的搜索结果。

优点:

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

缺点:

对于大多数用户来说,一般是想做一个精确数据爬取的爬虫,就像第一篇里爬歌单那个“主题爬虫”。而第二篇介绍的“通用爬虫”适合做搜索引擎,这种需求就比较少。如果以此为标准,那么为搜索引擎而生的Nutch就有着天生缺点。Nutch的架构里大部分为搜索引擎而设计的,对精确爬取没有特别的考虑。也就是说,用Nutch做主题爬虫,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发来扩展其定制能力,基本上就要破坏Nutch的框架,反而不如自己写了。

Pyspider

介绍:

Pyspider是一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。

Pyspider的主要功能包括,抓取、更新调度多站点的特定的页面;需要对页面进行结构化信息提取;灵活可扩展,稳定可监控。满足了绝大多数Python爬虫的需求 —— 定向抓取,结构化化解析。但是面对结构迥异的各种网站,单一的抓取模式并不一定能满足,灵活的抓取控制是必须的。为了达到这个目的,单纯的配置文件往往不够灵活,于是,通过脚本去控制抓取成为了最后的选择。而去重调度,队列,抓取,异常处理,监控等功能作为框架,提供给抓取脚本,并保证灵活性。最后加上web的编辑调试环境,以及web任务监控,即成为了最终的框架。

优点:

  1. 支持分布式部署。
  2. 完全可视化,对用户非常友好:WEB 界面编写调试脚本,起停脚本,监控执行状态,查看活动历史,获取结果产出。
  3. 简单,五分钟就能上手。脚本规则简单,开发效率高。
  4. 支持抓取JavaScript的页面。

总之,Pyspider非常强大,强大到更像一个产品而不是一个框架。

缺点:

  1. URL去重使用数据库而不是布隆过滤器,亿级存储的db io将导致效率急剧降低。
  2. 使用上的人性化牺牲了灵活度,定制化能力降低。

Scrapy

介绍:

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。Scrapy 使用 Twisted这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。Scratch,是抓取的意思,这个Python的爬虫框架叫Scrapy,大概也是这个意思吧。

优点:

  1. 极其灵活的定制化爬取。
  2. 社区人数多、文档完善。
  3. URL去重采用布隆过滤器方案。
  4. 可以处理不完整的HTML,Scrapy已经提供了selectors(一个在lxml的基础上提供了更高级的接口),可以高效地处理不完整的HTML代码。

缺点:

  1. 不支持分布式部署。
  2. 原生不支持抓取JavaScript的页面。
  3. 全命令行操作,对用户不友好,需要一定学习周期。

结论

篇幅有限,就先选择这三个最有代表性的框架进行PK。他们都有远超别人的优点,比如:Nutch天生的搜索引擎解决方案、Pyspider产品级的WebUI、Scrapy最灵活的定制化爬取。也都各自致命的缺点,比如Scrapy不支持分布式部署,Pyspider不够灵活,Nutch和搜索绑定。究竟该怎么选择呢?

我们的目标是做纯粹的爬虫,不是搜索引擎,所以先把Nutch排除掉,剩下人性化的Pyspider和高可定制的Scrapy。Scrapy的灵活性几乎能够让我们完成任何苛刻的抓取需求,它的“难用”也让我们不知不觉的研究爬虫技术。现在还不是享受Pyspider的时候,目前的当务之急是打好基础,应该学习最接近爬虫本质的框架,了解它的原理,所以把Pyspider也排除掉。

最终,理性的从个人的需求角度对比,还是Scrapy胜出!其实Scrapy还有更多优点:

  1. HTML, XML源数据选择及提取的原生支持。
  2. 提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了内置支持。
  3. 通过 feed导出 提供了多格式(JSON、CSV、XML),多存储后端(FTP、S3、本地文件系统)的内置支持。
  4. 提供了media pipeline,可以 自动下载 爬取到的数据中的图片(或者其他资源)。
  5. 高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来定制实现您的功能。
  6. 内置的中间件及扩展为下列功能提供了支持:
    1. cookies and session 处理
    2. HTTP 压缩
    3. HTTP 认证
    4. HTTP 缓存
    5. user-agent模拟
    6. robots.txt
    7. 爬取深度限制
  7. 针对非英语语系中不标准或者错误的编码声明, 提供了自动检测以及健壮的编码支持。
  8. 支持根据模板生成爬虫。在加速爬虫创建的同时,保持在大型项目中的代码更为一致。
  9. 针对多爬虫下性能评估、失败检测,提供了可扩展的 状态收集工具 。
  10. 提供 交互式shell终端 , 为您测试XPath表达式,编写和调试爬虫提供了极大的方便。
  11. 提供 System service, 简化在生产环境的部署及运行。
  12. 内置 Telnet终端 ,通过在Scrapy进程中钩入Python终端,使您可以查看并且调试爬虫。
  13. Logging 为您在爬取过程中捕捉错误提供了方便。
  14. 支持 Sitemaps 爬取。
  15. 具有缓存的DNS解析器。

下一步

吹了半天的Scrapy,时间也到了,如果大家能够喜欢上它,学习的效率一定会成倍提升!下次我会为大家带来满满的干货,并完成更具挑战性的爬虫任务,我们下期再见!

原文地址:https://www.cnblogs.com/tuohai666/p/8861422.html

时间: 2024-10-25 01:26:24

手把手教你写网络爬虫(3):开源爬虫框架对比的相关文章

手把手教你写网络爬虫(1):网易云音乐歌单

把之前发表在微信公众号的爬虫系列文章迁移过来,热热身,就当备份了. 手把手教你写网络爬虫(1) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 大家好,<手把手教你写网络爬虫>连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程实践,可以同时吸引程序员和门外汉的注意.本文由浅入深的把爬虫技术和盘托出,为初学者提供一种轻松的入门方式.请跟随我们一起踏上爬虫学习的打怪升级之路吧! 介绍 什么是爬虫? 先看看百度百科的定义: 简单的说网络爬虫(Web crawler)也叫做

[原创]手把手教你写网络爬虫(8):乱码

手把手教你写网络爬虫(8) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 字符编解码是爬虫里必学的一项知识,在我们的爬虫生涯中早晚会爬到乱码的网页,与其遇到时惊慌失措,不如早学早好,彻底避免乱码问题. 字符编码简介 什么是字符集 在介绍字符编码之前,我们先了解下什么是字符集. 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集:

手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取

系列教材: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 看完两篇,相信大家已经从开始的小菜鸟晋升为中级菜鸟了,好了,那我们就继续我们的爬虫课程. 上一课呢一定是因为对手太强,导致我们并没有完整的完成尚妆网的爬虫. 吭吭~,我们这一课继续,争取彻底搞定尚妆网,不留任何遗憾. 我们先回顾一下,上一课主要遗留了两个问题,两个问题都和ajax有关. 1.由于是ajax加载下一页,导致下一页url并不会被系统自动发现. 2.商品页面的价格是通过a

手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 老规矩,爬之前首先感谢淘宝公布出这么多有价值的数据,才让我们这些爬虫们有东西可以搜集啊,不过淘宝就不用我来安利了 广大剁手党相信睡觉的时候都能把网址打出来吧. 工欲善其事,必先利其器,先上工具: 1.神箭手云爬虫,2.Chrome浏览器 3.Chrome的插件XpathHelper 不知道是干嘛的同学请移步第一课

手把手教你写电商爬虫-第五课 京东商品评论爬虫 一起来对付反爬虫

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染 四节课过去了,咱们在爬虫界也都算见过世面的人,现在再来一些什么ajax加载之类的小鱼小虾应该不在话下了,即使是淘宝这种大量的ajax,我们 祭上我们的核武器,也轻松应对了,这一课主要是来看看除了技术上的页面处理外,我们还会遇上更棘手的问题,就是反爬虫,当然现

手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫

系列教程 手把手教你写电商爬虫-第一课 找个软柿子捏捏 如果没有看过第一课的朋友,请先移步第一课,第一课讲了一些基础性的东西,通过软柿子"切糕王子"这个电商网站好好的练了一次手,相信大家都应该对写爬虫的流程有了一个大概的了解,那么这课咱们就话不多说,正式上战场,对垒尚妆网. 首先,向我们被爬网站致敬,没有他们提供数据,我们更是无从爬起,所以先安利一下尚妆网: 经营化妆品时尚购物,大数据为驱动,并依托智能首饰为入口的新一代智慧美妆正品电子商务平台.其创始团队来自天猫.支付宝.欧莱雅.薇姿

Android开发之手把手教你写ButterKnife框架(三)

欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52672188 本文出自:[余志强的博客] 一.概述 上一篇博客讲了,如何在android studio使用apt < Android开发之手把手教你写ButterKnife框架(二)> 然后在Processor里生成自己的代码,把要输出的类,通过StringBuilder拼接字符串,然后输出. try { // write the file JavaFileObj

Android开发之手把手教你写ButterKnife框架(二)

欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52664112 本文出自:[余志强的博客] 上一篇博客Android开发之手把手教你写ButterKnife框架(一)我们讲了ButterKnife是什么.ButterKnife的作用和功能介绍以及ButterKnife的实现原理. 本篇博客主要讲在android studio中如何使用apt. 一.新建个项目, 然后创建一个module名叫processor 新建m

手把手教你写Sublime中的Snippet

手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜欢上的..Sublime Text 2使用心得 现在介绍一下Snippet, Snippets are smart templates that will insert text for you and adapt it to their context. Snippet 是插入到文本中的智能模板并