悠然乱弹:WebMagic VS TinySpider

简介:

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

一、扫描方法的差异

a.WebMagic的扫描

?
1
2
3
4
5
WebMagic采用的是遍地撒网、愿者上勾的方式,怎么解释这个遍地撒网呢?
在进行内容抓取的时候,与事先定义好的处理器中的匹配规则进行匹配,匹配成功则处理之。
把所有的超链接找到并添加到待处理列表中,然后对新找到的链接继续进行处理。
 
所以WebMagic会把所有的页面都扫描一次,在扫描的过程中进行匹配,匹配上的进行处理。
b.TinySpider的扫描
?
1
2
3
4
TinySpider采用的则是抽丝剥茧,精确打击的策略。什么个意思呢?
在进行内容抓取的时候,首先有个入口页面,然后在上面定义了许多Watcher,实际上就是关注点了,只有它关注的点匹配的,才会执行其后续的动作触发,也就是扫描哪些页面或者后续扫描的走向是由程序员完全把控的。
 
所以TinySpider在扫描的时候,不一定会扫描所有的页面,只扫描自己关心的内容。当然,TinySpider也通过遍地撒网模式进行内容抓取。

c.二者比较

?
1
2
3
4
5
WebMagic的编程模型更简单,TinySpider的编程则要复杂一些。
WebMagic的匹配准确度稍粗一点,TinySpider的匹配精准度更强一些。
不同的页面之间,WebMagic是没有关系的,因此不同的页面之间如果数据有关系,WebMagic处理起来比较麻烦,而TinySpider不同层次之间是可以方便的进行数据传递的,这方面有一定优势。
 
或者简单的说,WebMagic不同页面之间是列表方式进行扫描的,而TinySpider是递归方式树状扫描的。

二、数据获取方面的差异

WebMagic定义了数据抽取规则,如果数据比较规范,数据的抽取是非常简单的,只要定义好属性,再定义注解就可以了。 
TinySpider没有提供这种类型的功能,需要开发人员自己抽取数据,带来的好处就是自由度就更大。当然,TinySpider已经根据Watcher上定义的过滤规则把处理的数据都已经收集起来,只是自己处理即可。

三、数据存储方面的差异

WebMagic考虑了抽取到数据之后的存储问题,并做了良好支持。。 
TinySpider则把这个全部留给程序员,反正数据已经都提取到了,你自己想怎么处理自己决定吧。 

四、比较器方面的差异

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

五、分布式抓取的支持

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

六、用途比较

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

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

七、容错性比较

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

TinySpider中使用的HtmlParser是本人呕心沥血编写的一个HtmlParser,有相当好的容错性,在一定程度会可以修复错误,最坏的情况下,也会给出一个可用的Dom结构,只是结果不能保证完全正确(本来就是错的,不能正确修复也可以理解)。

八、扩展性比较

由于两个框架的问题领域是一致的,虽然设计方案不同,但是都有比较好的扩展性,通过扩展都可以覆盖对方的优势领域,也就是虽然现在不支持,但是扩展扩展就可以支持。

这个方面,二平。

总结

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

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


相关文章
|
IDE 开发工具 Python
这样的奇技淫巧,劝你不用也罢
这样的奇技淫巧,劝你不用也罢
112 0
端午还在“修锁”?你是真的卷王!(一)
哈喽,大家好,我是指北君。 今天为你带来的是 ReentrantLock 公平锁与非公平锁的源码分析,它是 Java 并发包下的一个 java.util.concurrent.locks 实现类,实现了 Lock 接口和 Serializable 接口。
端午还在“修锁”?你是真的卷王!(一)
端午还在“修锁”?你是真的卷王!(二)
今天为你带来的是 ReentrantLock 公平锁与非公平锁的源码分析,它是 Java 并发包下的一个 java.util.concurrent.locks 实现类,实现了 Lock 接口和 Serializable 接口。
端午还在“修锁”?你是真的卷王!(二)
ZCMU - 1605: 大一下之小试身手
ZCMU - 1605: 大一下之小试身手
60 0
|
存储 Java
我与阿里云的爱恨情仇
笔者本人毕业于一个很普通的三本院校,是计算机专业的学生
302 1
《大灌篮》观后感——大家的评论引起的思考。
今天休息,看了一下《大灌篮》,感觉挺好玩的。转几句台词记录一下。 搞笑部分 1、方世杰拿球,现场观众疯狂的欢呼,方世杰要灌篮,不要给对手任何的机会,伟大的第一大学的控球后卫,他代表了第一大学的光荣传统,乔丹科比Magic Johnson,在这一刻灵魂附体,方世杰一个人,他代表了第一大学篮球的悠久...
1380 0
|
存储 NoSQL 关系型数据库
使用开源项目的正确姿势,都是血和泪的总结!
开源精神是技术发展的源动力之一,受到工程师们的热烈欢迎。但是开源项目如此之多,哪一个最适合自己?如何更好利用开源项目,甚至做二次开发?今天,阿里资深无线开发专家李运华,总结多年与开源项目打交道的经验,讲述如何正确利用开源项目,希望对大家有所启发。
8039 0
|
新零售
问马云:6个最犀利的问题
这几天,马老师很忙。他从乌镇去了上海,又马不停蹄地去了广州,出席了“广州2017财富全球论坛”。 这个论坛,主持人和观众连番发问,比如“阿里巴巴最大的竞争对手是谁?”、“如何保证阿里巴巴不消失?” 我们选择了六个最犀利的问题。请看看,面对这些问题,马老师是怎么回答的。
3422 0
|
定位技术