市面上常见的开源爬虫对比与小型采访【安安课堂笔记】

图片1

世界上已经成型的爬虫软件多达上百种,本文对较为知名及常见的开源爬虫软件进行梳理,按开发语言进行汇总,如下表所示。 PS:虽然搜索引擎也有爬虫,但本次汇总的只是爬虫软件,而非大型、复杂的搜索引擎。

图片2

Java爬虫

1. Arachnid

特点:微型爬虫框架,含有一个小型HTML解析器

2、crawlzilla

特点:安装简易,拥有中文分词功能

3、Ex-Crawler

特点:由守护进程执行,使用数据库存储网页信息

4、Heritrix 特点:严格遵照robots文件的排除指示和META robots标签

5、heyDr 特点:轻量级开源多线程垂直检索爬虫框架

6、ItSucks 特点:提供swing GUI操作界面

7、jcrawl 特点:轻量、性能优良,可以从网页抓取各种类型的文件

8、JSpider 特点:功能强大,容易扩展

9、Leopdo 特点:包括全文和分类垂直搜索,以及分词系统

10、MetaSeeker 特点:网页抓取、信息提取、数据抽取工具包,操作简单

11、Playfish 特点:通过XML配置文件实现高度可定制性与可扩展性

12、Spiderman 特点:灵活、扩展性强,微内核+插件式架构,通过简单的配置就可以完成数据抓取,无需编写一句代码

13、webmagic 特点:功能覆盖整个爬虫生命周期,使用Xpath和正则表达式进行链接和内容的提取

14、Web-Harvest 特点:运用XSLT、XQuery、正则表达式等技术来实现对Text或XML的操作,具有可视化的界面

15、WebSPHINX 特点:由两部分组成:爬虫工作平台和WebSPHINX类包

16、YaCy 特点:基于P2P的分布式Web搜索引擎

Python爬虫

17、QuickRecon 特点:具有查找子域名名称、收集电子邮件地址并寻找人际关系等功能

18、PyRailgun 特点:简洁、轻量、高效的网页抓取框架

19、Scrapy 特点:基于Twisted的异步处理框架,文档齐全

C++爬虫

20、hispider 特点:支持多机分布式下载, 支持网站定向下载

21、larbin 特点:高性能的爬虫软件,只负责抓取不负责解析

22、Methabot 特点:过速度优化、可抓取WEB、FTP及本地文件系统

C#爬虫

23、NWebCrawler 特点:统计信息、执行过程可视化

24、Sinawler 特点:国内第一个针对微博数据的爬虫程序,功能强大

25、spidernet 特点:以递归树为模型的多线程web爬虫程序,支持以GBK (gb2312)和utf8编码的资源,使用sqlite存储数据

26、Web Crawler 特点:多线程,支持抓取PDF/DOC/EXCEL等文档来源

27、网络矿工 特点:功能丰富,毫不逊色于商业软件

PHP爬虫

28、OpenWebSpider 特点:开源多线程网络爬虫,有许多有趣的功能

29、PhpDig 特点:具有采集网页内容、提交表单功能

30、ThinkUp 特点:采集推特、脸谱等社交网络数据的社会媒体视角引擎,可进行交互分析并将结果以可视化形式展现

31、微购 特点:可采集淘宝、京东、当当等300多家电子商务数据

32、Ebot 特点:可伸缩的分布式网页爬虫

Ruby爬虫

33、Spidr 特点:可将一个或多个网站、某个链接完全抓取到本地

安 安 采 访 笔 记

对于爬虫君的功能来说,我们比较关心的问题往往是……

采访人:安安 被采访人:爬虫君代表

图片4

  • 爬虫君支持多线程么?能用代理么?爬虫君会爬取重复数据么?能爬取JS生成的信息么?

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

能不能爬js生成的信息和爬虫本身没有太大关系。爬虫主要是负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往需要通过模拟浏览器(htmlunit,selenium)来完成。这些模拟浏览器,往往需要耗费很多的时间来处理一个页面。

所以一种策略就是,使用这些爬虫来遍历网站,遇到需要解析的页面,就将网页的相关信息提交给模拟浏览器,来完成JS生成信息的抽取。


  • 爬虫君可以爬取ajax信息么?

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

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

爬虫往往都是设计成广度遍历或者深度遍历的模式,去遍历静态或者动态页面。爬取ajax信息属于deep web(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方法来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的第一轮爬取就是爬取种子集合(seeds)中的所有url。

简单来说,就是将生成的ajax请求作为种子,放入爬虫。用爬虫对这些种子,进行深度为1的广度遍历(默认就是广度遍历)。


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

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


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

开源爬虫一般都会集成网页抽取工具。主要支持两种规范:CSS SELECTOR和XPATH。至于哪个好,这里不评价。


  • 爬虫君怎么保存网页的信息?

有一些爬虫,自带一个模块负责持久化。比如webmagic,有一个模块叫pipeline。通过简单地配置,可以将爬虫抽取到的信息,持久化到文件、数据库等。

还有一些爬虫,并没有直接给用户提供数据持久化的模块,比如crawler4j和webcollector,而是让用户自己在网页处理模块中添加提交数据库的操作。至于使用pipeline这种模块好不好,就和操作数据库使用ORM好不好这个问题类似,取决于你的业务。


  • 爬虫君被网站封了怎么办?

爬虫被网站封了,一般用多代理(随机代理)就可以解决。但是这些开源爬虫一般没有直接支持随机代理的切换。所以用户往往都需要自己将获取的代理,放到一个全局数组中,自己写一个代理随机获取(从数组中)的代码。


  • 网页可以调用爬虫君么?

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


  • 爬虫君速度怎么样?

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


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

如果代码写对了,又爬不到数据,换其他爬虫也是一样爬不到。遇到这种情况,要么是网站把你封了,要么是你爬的数据是javascript生成的。爬不到数据通过换爬虫是不能解决的。


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

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

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

至于构架,开源爬虫目前主要是细节的数据结构的设计,比如爬取线程池、任务队列,这些大家都能控制好。爬虫的业务太简单,谈不上什么构架。

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


  • 如何防止你们的入侵?

使用专业的风控软件或平台可以有效的阻止我们抢滩登陆。以岂安科技为例——岂安科技是专注于为互联网企业提供业务风控解决方案,场景包括真假用户识别,恶意爬虫对,就是我们)、账号欺诈/盗用、业务欺诈、业务风险控制、交易欺诈监控、恶意订单、补贴滥用、盗卡盗刷等等,并拥有一系列带自主知识产权的核心产品。

岂安服务的行业覆盖互联网金融、消费金融、电商、云计算、O2O、商旅、游戏等诸多互联网细分市场。只要在这些行业遇到这些问题,都可以找它们。


  • 请简单描述。

点击进入岂安的世界就可以不花一分钱免费试用岂安业务风险情报服务,至于能不能搞定我们……你追我,如果你追到我,我就让你“嘿嘿嘿” (本文相关总结、回复源自博客博主五岳之巅,知乎用户老夏、36大数据

图片3