开源爬虫框架大对比,你喜欢的框架在上面吗?

优采云 发布时间: 2020-05-07 08:01

  

  

  介绍

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

  

  这些框架都太优秀,都有好多用户,活跃度相对低的并不说明技术低,活跃度相对高的似乎只是多满足了一些用户需求。接下来我们还是要理智的对主流爬虫框架做一个对比剖析。

  开源框架大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任务监控,即成为了最终的框架。

  优点:

  支持分布式布署。

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

  简单开源爬虫框架,五分钟才能上手。脚本规则简单,开发效率高。

  支持抓取JavaScript的页面。

  总之,Pyspider十分强悍,强大到更象一个产品而不是一个框架。

  缺点:

  URL去重使用数据库而不是布隆过滤器,亿级储存的db io将造成效率大幅减低。

  使用上的人性化牺牲了灵活度,定制化能力增加。

  Scrapy

  介绍:

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

  

  优点:

  极其灵活的多样化爬取。

  社区人数多、文档构建。

  URL去重采用布隆过滤器方案。

  可以处理不完整的HTML,Scrapy早已提供了selectors(一个在lxml的基础上提供了更中级的插口),可以高效地处理不完整的HTML代码。

  缺点:

  不支持分布式布署。

  原生不支持抓取JavaScript的页面。

  全命令行操作,对用户不友好,需要一定学习周期。

  结论

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

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

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

  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解析器。

  

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线