`
usenrong
  • 浏览: 514940 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

几款开源爬虫框架对比

 
阅读更多


第一类:分布式爬虫
爬虫使用分布式,主要是解决两个问题:

2)网速

1)Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有太大的意义。也就是说,用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新写一个分布式爬虫框架了。

3)Nutch虽然有一套插件机制,而且作为亮点宣传。可以看到一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。而且Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text文本)。

5)很多人说Nutch2有gora,可以持久化数据到avro文件、hbase、mysql等。很多人其实理解错了,这里说的持久化数据,是指将URL信息(URL管理所需要的数据)存放到avro、hbase、mysql。并不是你要抽取的结构化数据。其实对大多数人来说,URL信息存在哪里无所谓。

所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。

第二类:JAVA单机爬虫
这里把JAVA爬虫单独分为一类,是因为JAVA在网络爬虫这块的生态圈是非常完善的。相关的资料也是最全的。这里可能有争议,我只是随便扯淡。

对于爬虫的功能来说。用户比较关心的问题往往是:

不支持多线程、不支持代理、不能过滤重复URL的,那都不叫开源爬虫,那叫循环执行http请求。

2)爬虫可以爬取ajax信息么?

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

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

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

5)爬虫怎么保存网页的信息?

6)爬虫被网站封了怎么办?

7)网页可以调用爬虫么?

8)爬虫速度怎么样?

9)明明代码写对了,爬不到数据,是不是爬虫有问题,换个爬虫能解决么?

10)哪个爬虫可以判断网站是否爬完、那个爬虫可以根据主题进行爬取?

至于根据主题爬取,爬虫之后把内容爬下来才知道是什么主题。所以一般都是整个爬下来,然后再去筛选内容。如果嫌爬的太泛,可以通过限制URL正则等方式,来缩小一下范围。

设计模式纯属扯淡。说软件设计模式好的,都是软件开发完,然后总结出几个设计模式。设计模式对软件开发没有指导性作用。用设计模式来设计爬虫,只会使得爬虫的设计更加臃肿。

所以对于JAVA开源爬虫,我觉得,随便找一个用的顺手的就可以。如果业务复杂,拿哪个爬虫来,都是要经过复杂的二次开发,才可以满足需求。
第三类:非JAVA单机爬虫

先说python爬虫,python可以用30行代码,完成JAVA 50行代码干的任务。python写代码的确快,但是在调试代码的阶段,python代码的调试往往会耗费远远多于编码阶段省下的时间。使用python开发,要保证程序的正确性和稳定性,就需要写更多的测试模块。当然如果爬取规模不大、爬取业务不复杂,使用scrapy这种爬虫也是蛮不错的,可以轻松完成爬取任务。

还有一些ruby、php的爬虫,这里不多评价。的确有一些非常小型的数据采集任务,用ruby或者php很方便。但是选择这些语言的开源爬虫,一方面要调研一下相关的生态圈,还有就是,这些开源爬虫可能会出一些你搜不到的BUG(用的人少、资料也少)
[/align]
分享到:
评论

相关推荐

    phpspiderPHP蜘蛛爬虫框架

    PHPSpider是一款基于PHP的网页爬虫框架,专为开发者设计,用于高效地抓取互联网上的数据。这个框架在《我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言》一文中被提及,展现了PHP在处理网络...

    开源爬虫java文件.zip

    【标题】"开源爬虫java文件.zip" 涉及的主要知识点是Java编程语言和开源爬虫技术。Java是一种广泛使用的面向对象的编程语言,以其跨平台性、安全性以及高效性能而闻名。在这个压缩包中,我们可以看到与Java相关的...

    icrawler内置多个图像下载引擎的多线程爬虫框架

    icrawler是一个基于Python的开源爬虫框架,专为高效地抓取和下载网页图像而设计。它以其内置的多种图像下载引擎和多线程支持而脱颖而出,使得大规模图像抓取任务变得更加便捷和高效。 ### 一、icrawler框架核心特点...

    简单好用的nodejs 爬虫框架分享

    今天我们要分享的是一款基于Node.js开发的爬虫框架——Crawl-pet,它简化了爬虫的开发流程,使得新手也能快速上手。 首先,安装Crawl-pet框架非常简单。开发者需要确保本地已安装Node.js环境,然后通过npm(Node.js...

    分布式爬虫框架Cola.zip

    Cola是一个分布式的爬虫框架,用户只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。pip install pyyaml安装下载或者用git clone源码,假设在目录/to/...

    C#爬虫代码和文档,爬京东

    在本资源包中,我们主要关注的是一...同时,对于那些想要扩展其爬虫功能或对开源爬虫框架感兴趣的开发者,提供的文档也将是一份宝贵的参考资料。总的来说,这是一份全面的学习材料,适合初学者和有一定经验的C#开发者。

    java版ss源码-vw-crawler:简单轻便的Java爬虫框架,只要会一点简单的正则表达式和简单的css选择器就能轻松的采集数据

    前段时间工作上需要一些JD信息,我就从网上找了个开源的爬虫框架WebMagic,使用简单,易配置,功能也很强大,当然了也有些网站的数据不适合使用。前前后后写了不下十几个,慢慢的就想是不是可以把这些爬虫代码再抽象...

    分布式爬虫的研究与实现.pdf

    例如,在文中提到的Nutch爬虫框架,它是一个基于Java的开源网页爬取系统,其设计目标是提供一个可扩展的平台用于网络上的大规模数据收集。Nutch支持网页爬取、页面内容分析、索引和搜索,还具有良好的扩展性和可定制...

    一个基于分布式爬虫的信安文章搜索引擎

    在熟练运用Python语言的基础上,更加深入的掌握开源的爬虫框架Scrapy,为后续其他与爬虫相关的业务奠定理论基础和数据基础;进一步理解分布式的概念,为大数据的相关研究和硬件条件奠定基础;熟练掌握Python搭建网站...

    基于python的网络爬虫研究.pdf

    文档提到了几个广泛使用的Python爬虫框架和库,包括Scrapy、PySpider、BeautifulSoup、lxml、urllib等。这些框架和库各具特色,例如Scrapy是一个快速的高级爬虫框架,适合复杂的网页;BeautifulSoup库能够解析HTML和...

    Python网络爬虫实习报告-python实习报告.docx

    1. **Scrapy框架**:Scrapy是一款基于Python的开源爬虫框架,具有以下特点: - **高效**:支持异步处理,能够同时处理多个请求,提高爬取效率。 - **灵活**:提供了丰富的API,方便扩展和定制。 - **易用**:内置...

    爬虫大全.zip

    - **GitHub**:有许多开源爬虫项目可供学习和参考。 - **Stack Overflow**:解答爬虫开发过程中的技术问题。 - **在线课程**:如Coursera、Udacity等提供爬虫相关的系统学习资源。 综上所述,"爬虫大全.zip"中的...

    用java开源工具分析网站

    SiteCrawler是一个基于Java的网页爬虫框架,设计用于自动化地浏览和抓取网站内容。通过自定义配置,它能够按照指定规则遍历网页,提取所需数据,非常适合进行网站分析、内容挖掘或数据采集项目。 SiteCrawler的...

    基于Python 的网络爬虫系统.pdf

    文中提到的Scrapy是一个开源的Python框架,它专门用于爬取网页数据并提取结构性数据,是目前最流行的网络爬虫框架之一。Scrapy之所以受到青睐,是因为它不仅易于使用,而且具有很高的灵活性和可扩展性。开发者可以只...

    JAVA上百实例源码以及开源项目源代码

    编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建...

    Java开源的下一代社区平台Symphony.zip

    做最 NB 的开源社区系统,预计几年以后 82% 的社区都将是 Sym 搭建的 作者技痒,炫技之作,Ruby/Python/Node.js/(特别是)PHP 怎么能比得过 Java 案例 个人维护: 黑客派 宽客网 贵州IT 超级产品经理 ...

    基于Elastic Stack平台的疫情分析系统的设计与实现-数据获取模块.docx

    4. Scrapy爬虫框架的应用:Scrapy是一个基于Python的爬虫框架,能够高效地抓取和处理大量数据。本系统使用Scrapy爬虫框架来实时采集疫情相关数据,并对数据进行处理和可视化呈现给用户。 5. 分布式爬虫的应用:对于...

Global site tag (gtag.js) - Google Analytics