开源爬虫框架各有什么优缺点

投稿 不建议 2023-08-20 15:45:33 -
爬虫框架是什么

大家好,今天给各位分享开源爬虫框架各有什么优缺点的一些知识,其中也会对为什么不建议用scrapy进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

本文目录

  1. 想要用python做爬虫,是使用scrapy框架还是用requests、bs4等库
  2. 为什么很多爬虫用python,用PHP不行吗
  3. 开源爬虫框架各有什么优缺点
  4. 写Python爬虫一定要用到chromedriver吗

想要用python做爬虫,是使用scrapy框架还是用requests、bs4等库

个人比较推荐scrapy,这个实现是太方便了,接触后感觉-这框架太神了,都不用怎么写代码,一个爬虫就写成了。下面分享一下我自己的使用过程。

最近看到诗词想爬取,正好前段时间有学习scrapy,想那就结合scrapy做一个爬虫吧。想着就动手了,首先选择的目标网站是诗词名句网。个人比较喜欢辛弃疾,就以辛弃疾的诗词为爬取对象。

设定起始网站,做为爬虫的种子链接-http://www.shicimingju.com/chaxun/zuozhe/44.html

爬虫需要种子链接,找到辛弃疾的诗词列表开始页面,作为种子链接,即爬虫开始的爬取的页面。

爬虫代码的编写,这也是我们的核心,因为scrapy框架提供给我们的关注点也是在这里,scrapy让我们更加关注业务逻辑的本身

观察页面,可以看到页面通过下一页一步一步地翻页,罗列所有的诗词,在每个列表项中,可以通过具体的链接到达诗词的详情页面,里面记录了诗词的详细内容。根据这样的逻辑,我们可以如下写爬虫的代码。

当然,我们也需要将爬取的结果存储到服务器中,在这里我选择的是Mongodb,这部分也挺方便的,简单的写一个类,就可以实现数据写入到Mongodb中。

以上,个人使用scrapy爬取诗词网站中辛弃疾诗词的过程,罗列了核心的代码,整体上看,代码量真的很少,1百多行的代码就够了。所以,个人还是比较偏向于scrapys框架,让我们更多地关注业务本身。

为什么很多爬虫用python,用PHP不行吗

主要看你定义的“爬虫”干什么用。

1、如果是定向爬取几个页面,做一些简单的页面解析,爬取效率不是核心要求,那么用什么语言差异不大。当然要是页面结构复杂,正则表达式写得巨复杂,尤其是用过那些支持xpath的类库/爬虫库后,就会发现此种方式虽然入门门槛低,但扩展性、可维护性等都奇差。因此此种情况下还是推荐采用一些现成的爬虫库,诸如xpath、多线程支持还是必须考虑的因素。

2、如果是定向爬取,且主要目标是解析js动态生成的内容,页面内容是有js/ajax动态生成的,用普通的请求页面->解析的方法就不管用了,需要借助一个类似firefox、chrome浏览器的js引擎来对页面的js代码做动态解析。此时,推荐考虑casperJS+phantomjs或slimerJS+phantomjs,当然诸如selenium之类的也可以考虑。

3、如果爬虫是涉及大规模网站爬取,效率、扩展性、可维护性等是必须考虑的因素时候,涉及诸多问题:I/O机制、分布式爬取、多线程并发、消息通讯、判重机制、任务调度等等,此时候语言和所用框架的选取就具有极大意义了。

PHP:对多线程、异步支持较差,不建议采用。

Python:强烈建议,对以上问题都有较好支持。尤其是Scrapy框架值得作为第一选择。优点诸多:支持xpath;基于twisted,性能不错;有较好的调试工具;

对于大部分公司还是建议基于一些开源的框架来做,不要自己发明轮子,做一个简单的爬虫容易,但要做一个完备的爬虫挺难的。

开源爬虫框架各有什么优缺点

首先爬虫框架有三种

分布式爬虫:Nutch

JAVA单机爬虫:Crawler4j,WebMagic,WebCollector

非JAVA单机爬虫:scrapy

第一类:分布式爬虫优点:

海量URL管理

网速快

缺点:

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

用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非。

Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。如果集群机器数量较少,爬取速度反而不如单机爬虫。

Nutch虽然有一套插件机制,而且作为亮点宣传。可以看到一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。

Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text)

用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。

Nutch2的版本目前并不适合开发。官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。

第二类:JAVA单机爬虫优点:

支持多线程。

支持代理。

能过滤重复URL的。

负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往需要通过模拟浏览器(htmlunit,selenium)来完成。

缺点:设计模式对软件开发没有指导性作用。用设计模式来设计爬虫,只会使得爬虫的设计更加臃肿。第三类:非JAVA单机爬虫优点:

先说python爬虫,python可以用30行代码,完成JAVA

50行代码干的任务。python写代码的确快,但是在调试代码的阶段,python代码的调试往往会耗费远远多于编码阶段省下的时间。

使用python开发,要保证程序的正确性和稳定性,就需要写更多的测试模块。当然如果爬取规模不大、爬取业务不复杂,使用scrapy这种爬虫也是蛮不错的,可以轻松完成爬取任务。

缺点:

bug较多,不稳定。

爬虫可以爬取ajax信息么?

网页上有一些异步加载的数据,爬取这些数据有两种方法:使用模拟浏览器(问题1中描述过了),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果是自己生成ajax请求,使用开源爬虫的意义在哪里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。

如果我已经可以生成我所需要的ajax请求(列表),如何用这些爬虫来对这些请求进行爬取?

爬虫往往都是设计成广度遍历或者深度遍历的模式,去遍历静态或者动态页面。爬取ajax信息属于deepweb(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方法来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的第一轮爬取就是爬取种子集合(seeds)中的所有url。简单来说,就是将生成的ajax请求作为种子,放入爬虫。用爬虫对这些种子,进行深度为1的广度遍历(默认就是广度遍历)。

爬虫怎么爬取要登陆的网站?

这些开源爬虫都支持在爬取时指定cookies,模拟登陆主要是靠cookies。至于cookies怎么获取,不是爬虫管的事情。你可以手动获取、用http请求模拟登陆或者用模拟浏览器自动登陆获取cookie。

爬虫怎么抽取网页的信息?

开源爬虫一般都会集成网页抽取工具。主要支持两种规范:CSSSELECTOR和XPATH。

网页可以调用爬虫么?

爬虫的调用是在Web的服务端调用的,平时怎么用就怎么用,这些爬虫都可以使用。

爬虫速度怎么样?

单机开源爬虫的速度,基本都可以讲本机的网速用到极限。爬虫的速度慢,往往是因为用户把线程数开少了、网速慢,或者在数据持久化时,和数据库的交互速度慢。而这些东西,往往都是用户的机器和二次开发的代码决定的。这些开源爬虫的速度,都很可以。

写Python爬虫一定要用到chromedriver吗

不是,你说的那个driver是用谷歌浏览器驱动,通常代码中如果用到headless的谷歌浏览器,则必须用这个驱动;

其他情况,则没有必要用,也没有用!

好了,关于开源爬虫框架各有什么优缺点和为什么不建议用scrapy的问题到这里结束啦,希望可以解决您的问题哈!

这些爬虫框架你见过吗 33款开源爬虫框架分享