爬虫产品分析
国内外优秀爬虫产品
国外
- kimono labs,已经被palantir收购,目前服务已经暂停,desktop版本可用。
- import.io
国内
- 集搜客,目前只能以插件的形式安装在火狐浏览器上
- 八爪鱼
试用分析
kimono
目前kimono labs服务以及暂停,但是kimono desktop版本依旧可以用,下面是两个版本的对比情况。
从一个爬虫产品来看,desktop版本的功能已经是全的了。
kimono产品从完整意义上来说并不完全是一个爬虫产品,爬取页面信息只是其中一个环节,它的目的是将整个
互联网作为一个完整的数据库来使用,简化应用的开发流程。它的着眼点是应用,而不是数据。后面会做介绍。
先看看kimono desktop版本如何使用:
其中第三步(安装firebase)是可选的,这里可以科普一下firebase的基本知识,具体使用因为爬取数据
关系不大,此处不做详细介绍
Firebase攻克了实时性这一难关,自动响应数据变化,为用户带来全新的交互体验。用户可以使用JavaScript 直接从客户端访问Firebase中存储的数据,无需运行自有数据库或网络服务器即可构建动态的、数据驱动的网站,且与用户现有后台工具并行不悖。用户无需购置服务器,也不需要编写服务器代码,只需应用HTML 和JavaScript技术就可创建交互性极强的应用。Firebase简化了编码工作,使用户可以专注问题本身,节省开发时间,迅速完成应用。
从上面也可以看出:kimono主要的用途还是快速开发应用。尽量简化用户获取数据的过程。
以zhihu为例,探索一下kimono的数据收集和服务提供过程:
安装插件
中间的k字图标就是安装好的chrome浏览器插件,目前看Kimono只支持chrome浏览器,desktop版本支持mac版本和windows版本。
安装chrome插件需要用到vpn
属性字段定义
kimono抓取数据的过程比较直观,如图所示,左上角有属性框,可以定义要抓取的属性的名字,属性的内容可以直接用鼠标在页面上点选,其中黄色的部分就是点选的结果。
可以定义多个属性,在上面的插件栏中每个属性都用一个圆形图标表示,圆形图标中的数字表明在页面内容中获取到了几个数据。
*** 注意:***
- 如果鼠标点选的时候,选中了多个内容,可以通过x按钮去掉不想要的内容
- 选择的力度有时候并没有那么细,比如只想要某个数量,但是会把放在一起的汉字选上
通过插件中的预览按钮,可以看到当前页面的属性选取情况。这里从当前的问题页中选了四个字段,可以看到字段的名称和内容。
这里选取页面属性是通过页面中的dom树来实现的,在高级模式下,可以看到每个属性对应的dom树路径,并可以按需来进行修改路径。
这也是为什么某一些内容会多选的原因,最细的粒度只能到dom树的一个叶子节点。
因为kimono是一个快速构建api的系统,所以也提供了api常用的几种数据传输格式,主要是json,csv和rss,这里看一下就可以,不用太关注。
当把页面中所有的属性都选取完毕之后,就可以点击插件上的done按钮,完成属性字段的定义了。这时候会弹出一个api的定义框,可以定义api的名称。
api创建完毕后,可以看到kimono desktop上也有了刚刚创建的api。kimono desktop在启动之后会在本地启动一个服务器,插件会在创建api的时候将
内容同步到kimono desktop app中。
数据抓取
上面只是从页面中定义了要抓取的属性,相当于定义了一个页面的抓取规则,并没有开始实际页面抓取的过程。从kimono desktop中点开创建的api可以看到下面三部分内容:
Data View/Crawl Setup/Modify Result。对应了完整的数据爬取过程。
- Data View
Data View中是用不同的格式来显示最终的获取结果,目前这个api还没有启动,只有在定义字段的时候获取到的一条结果。
- Crawl Setup
Crawl Setup部分的内容比较重要,爬虫系统中最基础的有两部分,一部分是属性字段的定义,一部分是url的生成,
Crawl Setup定义了四种url的生成规则:Source URL Only/Manual URL List/Generated URL List/Source URL API. 前两种很好理解,第三种是根据特别的规则生成URL。规则有三种:缺省值,普通列表和随机值。随机值的时候可以是一个范围。
通过随机值生成的URL列表如下,从41181466-41191466,共有9981个pages:
- Modify Result
前面说过获取的结果的最小的粒度只是dom树的叶子节点。这样有一些数据就比较粗糙。这里提供了修改获取的结果的机会,可以对获取到的原始数据做二次处理。
kimono只支持通过JavaScript修改结果数据
根据上面的配置,最终的爬取结果如下:
这里因为没有注册kimono的账户,也没有配置自己的firebase服务,所以没有继续测试通过网络调用创建的api获取数据。因为本次主要分析爬虫产品,不关注如何作为一个快速app的服务,所以api的可用性部分不再验证。
总结
梳理了一下kimono的整体架构:
从上图可以看出kimono的一些设计思路:
爬取规则(属性字段)和爬虫是分离的,整体来说可以分为三部分:规则定义、调度规则、爬虫系统部分。
因为爬取规则部分是和网页紧密相关的,所以这部分直接以浏览器插件的形式嵌入到浏览器中,方便用户直观地定义个性化的爬取规则。
调度规则主要是url的定义,这部分也需要用户自定义,不同网站的规则往往不同,这里通过一个桌面软件能方便使用,当然也可以直接放在网站上,现在不能使用的kimono labs应该就是这样,可以节省用户下载app的开销,但是不好的地方是要保持联网,这样才能保证浏览器插件和网站的通信。目前kimono提供了桌面端程序和网络端程序,还是很全面的。
提供了修改结果的接口,允许用户对直接抓取的结果进行修改,这样直接可以输出最终数据了。当然kimono本质上输出的是接口,不是数据。
爬虫系统我们是看不到的,完全隐藏在kimono服务器后面。
优点
简洁直观,也相对灵活。对前端知识了解较少也可以使用。同时也提供了高级模式供高端用户进行个性化的配置。
完全屏蔽爬虫细节,用户只需要按照自己的需求考虑业务逻辑即可,不用关心技术细节。
ui界面做得比较美观易用。
缺点
目前只支持不需要登陆的页面,没有提供配置cookie或者其他的绕过登陆的机制。
某些情况下用页面点选的方式会导致一些元素获取不到,不过有高级模式可以弥补。
url的生成规则比较简单,一些设计复杂的页面会比较难以生成有效的url。
界面过于简洁,用户可以控制的部分比较少,碰到一些反爬虫机制的时候用户可能不好调整。易用性和灵活性两难全。
import.io
import.io的magic很神奇,直接在输入一个网址,直接就能自动分析出来要爬的字段。虽然有冗余,也已经很神奇了。
import.io也有app,没有浏览器插件,app有windows/mac/linux平台的。通过app可以使用全部的功能,这点和kimono不同,kimono的桌面端程序的功能比网络端的少。
完整版的import.io包含下面四个组件:
Magic
magic功能和网页版的一样,能智能解析网页上的内容,但是没有办法编辑获取的数据字段的内容。具体技术不太清楚,猜测是用了类似于自然语言解析之类的技术,这个是importio的比较酷的功能,但是目前看实用性并不大。
Extractor
import的extractor和kimono的功能比较类似,可以实现爬取规则的定义和修改,定义爬取路线(URL的生成规则),并提供结果的导出,或者作为一个API存在。Extractor通过xpath来定义爬取规则的,没有用jquery.同时也不提供对结果数据的修改。
Crawler
Crawler在Extractor的基础上,实现了自动翻页功能。假设要采集页面数为100的网页数据,通过 http://import.io 的Crawler功能就能一键将这100页的信息采集下来,那么具体的采集过程是如何实现的,下面笔者带你简单了解一下Crawler的采集过程。
Connector
就是在网页上做动作,主要是针对网址无变化,但信息在深层次页面上。需要做了动作以后才能显示出来,但是页面的网址又不发生变化,这就大大增加了采集数据的难度,因为即使配置好了规则,结果爬虫进入的页面是初始页面,无法采集到目标信息,而Connector的存在就是为了解决此类问题。Connector可以记录这一点击过程,进而采集到目标页面的信息。
对import.io和集搜客的详细分析,集搜客的CTO已经做了很详细的分析,可以参考下面的引用:
import.io和集搜客
从分析文章中可以看出gooseeker只能针对一些网站预先定义好爬取规则,然后公布给别人用。
这个过程只是将爬取过程进行了自动化,简化了爬虫的环境配置工作,在通用性上并没有太多亮点,
相比来说,import.io做得更好,在通用性上已经比较智能了,这个应该是一个优秀爬虫产品的方向。
http://www.zhihu.com/question/41392315/answer/90929603?from=profile_answer_card
总结
importio的主要功能也是集中在定义爬取规则和定义爬取路线上。功能做得更复杂,相比kimono来说,上手的难度更大一些,但是功能更强大一些,相比来说也更加灵活。
集搜客没有用过,需要使用指定版本的firefox浏览器才能使用(不是最新版本的),用户体验并不好。
importio和集搜客因为已经有人做过分析,所以这里分析的就比较简略,如果感兴趣的可以看上面知乎上华天清的分析。
八爪鱼
八爪鱼是国内一款很好的爬虫工具,只有windows版本,并且需要安装在pc上注册之后使用,收费版会开放一些更高级的功能。
从八爪鱼的宣传来看,目前已有很大的用户群了。
八爪鱼和kimono和importio相比,是一个纯粹的爬虫产品。专注于替企业和个人爬取数据,而且目前已经做得相当好了,八爪重对于爬虫生态也有涉及,有社区可以交易爬取规则,如我们先前爬取的58的页面在社区中就有现成的规则。这也是一种好的方式,可以避免简单重复的工作。也有一部分人在社区上交易数据
八爪鱼的界面虽然不够美观简介,但是功能比较聚焦,一个单页面的完整爬取过程如下:
爬取规则的定义没有亮点,都是通过鼠标点击获取要爬取的内容,然后生成爬取规则。这里做得不好的是,爬取规则不能修改。但是提供了一些常用的字段,比如url和爬取时间等等。有小改进。
八爪鱼在生成爬取路线的时候,不易用,没有像kimono和importio那样简单易用的url生成规则。
总结
相比其他爬虫产品,八爪鱼在做爬虫产品的同时也涉及了一部分爬虫生态的内容。可以提取和交易爬虫规则是一个亮点。其他的比较实用的功能并没有。
思考
根据上面不同爬虫产品的试用,从用户角度来看好用的爬虫产品应该有下面几个特点:
规则提取简单,能通过可视化的简洁的方式来提取规则,这方面kimono做得最好。
要提供修改规则的高级模式,允许用户对规则进行修改,满足少部分用户的需求。
爬取路线要清晰,可以提供多种配置url的方式,而且要清晰简明,kimono和importio都比较清晰,kimono有4种方式配置url,importio有3种,八爪鱼简单试用了一下只看到2种且不清晰。
可以对爬取之后的数据进行修改,这样可以将一些费时的操作在数据处理的过程中就完成了,不用到应用部分再处理。
对用户屏蔽尽量多的细节,对于分布式爬取,数据存储过程,不同组件之间的通信等都要尽量屏蔽掉,让用户能集中于数据获取过程。
能自动识别页面中有用的信息,给出一些模糊的数据并支持后续修改。importio的magic支持智能获取信息字段,但是不支持对识别出来的数据进行处理。网上看到有个教程上面有修改数据字段的操作,但是实际试用过程中并没有看到该功能。
另外一些没有被其他爬虫实现,但是可能是重要的功能
用户登录,对登录过程的支持,复杂的情况下要可以识别验证码。
支持选取不同的数据库存储数据,目前的几款产品都将数据存储在他们自己的服务器上,对外提供导出等接口,数据量很庞大的时候并不合适。
如果必要能开放更灵活和复杂的功能给用户,如能调整爬取速率,配置代理等来规避一些反爬虫机制
支持增量爬取,目前看上述几种爬虫产品都不支持增量爬取。