两者都是可以用于网页数据抓取,都有良好的扩展性及架构设计,但是由于定位稍有差异,因此在开发的时候各有侧重点,今天就写一篇专门的文章进行比较,由于对WebMagic学习得还不够,因此有些地方可能是错误地,欢迎指正或板砖伺候。
a.WebMagic的扫描
1
2
3
4
5
|
WebMagic采用的是遍地撒网、愿者上勾的方式,怎么解释这个遍地撒网呢?
在进行内容抓取的时候,与事先定义好的处理器中的匹配规则进行匹配,匹配成功则处理之。
把所有的超链接找到并添加到待处理列表中,然后对新找到的链接继续进行处理。
所以WebMagic会把所有的页面都扫描一次,在扫描的过程中进行匹配,匹配上的进行处理。
|
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里面本身没有分布式抓取支持,但是开发者可以与Tiny框架中的分布式计算框架结合使用来完成分布式数据的抓取。
TinySpider则适合于只有Java编程基础的程序员来处理页面比较复杂,页面之间有顺序关系的各种规范不规范的Html页面。
WebMagic中的HtmlPaser不知道用的什么??这个方面不明确
TinySpider中使用的HtmlParser是本人呕心沥血编写的一个HtmlParser,有相当好的容错性,在一定程度会可以修复错误,最坏的情况下,也会给出一个可用的Dom结构,只是结果不能保证完全正确(本来就是错的,不能正确修复也可以理解)。
由于两个框架的问题领域是一致的,虽然设计方案不同,但是都有比较好的扩展性,通过扩展都可以覆盖对方的优势领域,也就是虽然现在不支持,但是扩展扩展就可以支持。
这个方面,二平。
通过上面的比较,确实来说,作为网络内容抓取方面,WebMagic和TinySpider都是不错的方案,在扩展性方面都设计比较到位,在编程便捷性及内容抓取准确性方面都有比较好的侧重与妥协。
如果想对网页抓取方面进行学习或实践,两个方案都是值得接触的。