悠然乱弹:WebMagic VS TinySpider

上次@黄勇 提到与@黄亿华 WebMagic比较的问题。我在后面简单回复了一下下,现系统整理一下,不必定正确。 程序员

二者都是能够用于网页数据抓取,都有良好的扩展性及架构设计,可是因为定位稍有差别,所以在开发的时候各有侧重点,今天就写一篇专门的文章进行比较,因为对WebMagic学习得还不够,所以有些地方多是错误地,欢迎指正或板砖伺候。 编程

1、扫描方法的差别

a.WebMagic的扫描 网络

WebMagic采用的是遍地撒网、愿者上勾的方式,怎么解释这个遍地撒网呢?
在进行内容抓取的时候,与事先定义好的处理器中的匹配规则进行匹配,匹配成功则处理之。
把全部的超连接找到并添加到待处理列表中,而后对新找到的连接继续进行处理。

因此WebMagic会把全部的页面都扫描一次,在扫描的过程当中进行匹配,匹配上的进行处理。
b.TinySpider的扫描
TinySpider采用的则是抽丝剥茧,精确打击的策略。什么个意思呢?
在进行内容抓取的时候,首先有个入口页面,而后在上面定义了许多Watcher,实际上就是关注点了,只有它关注的点匹配的,才会执行其后续的动做触发,也就是扫描哪些页面或者后续扫描的走向是由程序员彻底把控的。

因此TinySpider在扫描的时候,不必定会扫描全部的页面,只扫描本身关心的内容。固然,TinySpider也经过遍地撒网模式进行内容抓取。

c.两者比较 架构

WebMagic的编程模型更简单,TinySpider的编程则要复杂一些。
WebMagic的匹配准确度稍粗一点,TinySpider的匹配精准度更强一些。
不一样的页面之间,WebMagic是没有关系的,所以不一样的页面之间若是数据有关系,WebMagic处理起来比较麻烦,而TinySpider不一样层次之间是能够方便的进行数据传递的,这方面有必定优点。

或者简单的说,WebMagic不一样页面之间是列表方式进行扫描的,而TinySpider是递归方式树状扫描的。

2、数据获取方面的差别

WebMagic定义了数据抽取规则,若是数据比较规范,数据的抽取是很是简单的,只要定义好属性,再定义注解就能够了。
TinySpider没有提供这种类型的功能,须要开发人员本身抽取数据,带来的好处就是自由度就更大。固然,TinySpider已经根据Watcher上定义的过滤规则把处理的数据都已经收集起来,只是本身处理便可。

3、数据存储方面的差别

WebMagic考虑了抽取到数据以后的存储问题,并作了良好支持。。
TinySpider则把这个所有留给程序员,反正数据已经都提取到了,你本身想怎么处理本身决定吧。

4、比较器方面的差别

WebMagic主要经过注解加天XPath的方式进行内容抽取,所以对于比较规范的内容抓取是很是方便的。
TinySpider则内建了一个强大的匹配器,支持节点指定属性名及指定属性值过滤(能够指定多组)、指定属性名过滤(不论是什么值均可以,能够指定多个)、能够指定排除属性及属性值(即不能包含的属性名及值,能够包含多组)、不能包含的属性(能够包含多组)、包含文本内容(能够指定多组)、不能包含的文件内容(能够指定多组),能够指定包含的节点名(能够指定多组)、能够指定不能包含的节点(能够指定多组)、能够指定必须在某个节点下(能够指定多组)、能够指定不能在某个节点下(能够指定多组)、能够指定至少包含某几个节点中的一个,能够指定至下包含某几个属性中的一个,能够根据节点名进行搜索。 不只能够用来抓取内容,能够能够结合上下文准确的抓取内容。
这方面简洁性方面WebMagic占优,精准性方面TinySpider更强一点。

5、分布式抓取的支持

WebMagic内建支持分布式抓取,具体实现是在不一样的机器上开取线程,而后共享一个抓取队列的方式来抓取。
TinySpider里面自己没有分布式抓取支持,可是开发者能够与Tiny框架中的分布式计算框架结合使用来完成分布式数据的抓取。 框架

6、用途比较

WebMagic更适合对于正则、XPath比较熟悉的程序员来抓取 数据比较规范,且页面间没有什么逻辑关系的Html内容

TinySpider则适合于只有Java编程基础的程序员来处理页面比较复杂,页面之间有顺序关系的各类规范不规范的Html页面。 分布式

7、容错性比较

WebMagic中的HtmlPaser不知道用的什么??这个方面不明确 ide

TinySpider中使用的HtmlParser是本人呕心沥血编写的一个HtmlParser,有至关好的容错性,在必定程度会能够修复错误,最坏的状况下,也会给出一个可用的Dom结构,只是结果不能保证彻底正确(原本就是错的,不能正确修复也能够理解)。
学习

8、扩展性比较

因为两个框架的问题领域是一致的,虽然设计方案不一样,可是都有比较好的扩展性,经过扩展均可以覆盖对方的优点领域,也就是虽然如今不支持,可是扩展扩展就能够支持。 spa

这个方面,二平。 .net

总结

经过上面的比较,确实来讲,做为网络内容抓取方面,WebMagic和TinySpider都是不错的方案,在扩展性方面都设计比较到位,在编程便捷性及内容抓取准确性方面都有比较好的侧重与妥协。

若是想对网页抓取方面进行学习或实践,两个方案都是值得接触的。

相关文章
相关标签/搜索