WebMagic 0.5.1 发布,Java 爬虫框架 - 开源中国社区
WebMagic 0.5.1 发布,Java 爬虫框架
黄亿华 2014年05月03日

WebMagic 0.5.1 发布,Java 爬虫框架

黄亿华 黄亿华 发布于2014年05月03日 收藏 51 评论 15

免费体验IBM Cloud,构建Iot应用 >>>  

此次更新主要包括Scheduler的一些改动,对于自己定制过Scheduler的用户,强烈推荐升级。

  • 修复了RedisScheduler无法去重的BUG,感谢@codev777 仔细测试并发现问题。 #117

  • 对Scheduler进行了重构,新增了接口DuplicateRemover,将去重单独抽象出来,以便在同一个Scheduler中选择不同的去重方式。 #118

  • 增加了BloomFilter去重方式。BloomFilter是一种可以用极少的内存消耗完成大量URL去重的数据结构,缺点是会有少量非重复的URL被判断为重复,导致URL丢失(小于0.5%)。

使用以下的方式即可将默认的HashSet去重改为BloomFilter去重:

spider.setScheduler(new QueueScheduler().setDuplicateRemover(new BloomFilterDuplicateRemover(10000000)) 
//10000000是估计的页面数量
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:WebMagic 0.5.1 发布,Java 爬虫框架
分享
评论(15)
最新评论
0

引用来自“snail9527”的评论

在广度优先的有限定深度的递归抓取过程中使用hash去重(无论是HashSet还是BloomFilter)这种方式会造成比较严重的漏抓的,原因不是hash冲突,而是某些关键页面被去重而不继续往这个页面的更深一层递归了。网站目录是个树形结构,而爬虫遍历时是个网形结构,如何快速遍历整个网站,也是爬虫要考虑的一个重要方面。可能我表达得不是很清楚。

引用来自“黄亿华”的评论

hashset最终比较是会对值比较的,不存在漏抓问题,BloomFilter有这个问题。不过一般来说,到网站的目标URL,关键路径都不止一条,这种情况下问题不大。

引用来自“snail9527”的评论

即时是hashset会有的,不是比较方式的问题。是这种去重策略本身就有问题。抓取过程:获得一撮url=》遍历所有url=》判断url是否已抓取(即去重)和页面深度是否超过抓取最大深度(防止进入黑洞)=》未超过且未抓取则抓取此页面,否则下一个url。只要有最大深度限制,这种去重方式都会存在漏抓的。如果要求不是那么苛刻(一个也不能漏)的话,这种策略就足够了。这也是在实践中得到的经验。共勉!
nice :) 实践中我也发现了此问题 正在找解决方案。
0

监控的demo没有? web监控界面可能提供,像druid的监控那样

0

引用来自“snail9527”的评论

在广度优先的有限定深度的递归抓取过程中使用hash去重(无论是HashSet还是BloomFilter)这种方式会造成比较严重的漏抓的,原因不是hash冲突,而是某些关键页面被去重而不继续往这个页面的更深一层递归了。网站目录是个树形结构,而爬虫遍历时是个网形结构,如何快速遍历整个网站,也是爬虫要考虑的一个重要方面。可能我表达得不是很清楚。

引用来自“黄亿华”的评论

hashset最终比较是会对值比较的,不存在漏抓问题,BloomFilter有这个问题。不过一般来说,到网站的目标URL,关键路径都不止一条,这种情况下问题不大。
即时是hashset会有的,不是比较方式的问题。是这种去重策略本身就有问题。抓取过程:获得一撮url=》遍历所有url=》判断url是否已抓取(即去重)和页面深度是否超过抓取最大深度(防止进入黑洞)=》未超过且未抓取则抓取此页面,否则下一个url。只要有最大深度限制,这种去重方式都会存在漏抓的。如果要求不是那么苛刻(一个也不能漏)的话,这种策略就足够了。这也是在实践中得到的经验。共勉!
0

引用来自“snail9527”的评论

BloomFilter如果没有做本地持久化的话,在重启爬虫初始化BloomFilter时,如果已抓取的url量较大,那个初始化过程会非常漫长。建议基于内存映射文件来实现BloomFilter,依然很高效!

引用来自“ansj”的评论

很漫长吗?不漫长吧!
我说的初始化包括两个步骤,一创建一个BloomFilter实例,二读取所有已抓取过的url初始化BloomFilter。几万几十万的级别没多大问题,到百万级别的时候就很明显了。这都是我们在生产环境中得到的经验。
0

马克

0

回去看看,强烈支持⊙▽⊙

0

顶!
非常好用的抓取器。

0

引用来自“snail9527”的评论

在广度优先的有限定深度的递归抓取过程中使用hash去重(无论是HashSet还是BloomFilter)这种方式会造成比较严重的漏抓的,原因不是hash冲突,而是某些关键页面被去重而不继续往这个页面的更深一层递归了。网站目录是个树形结构,而爬虫遍历时是个网形结构,如何快速遍历整个网站,也是爬虫要考虑的一个重要方面。可能我表达得不是很清楚。

hashset最终比较是会对值比较的,不存在漏抓问题,BloomFilter有这个问题。不过一般来说,到网站的目标URL,关键路径都不止一条,这种情况下问题不大。
0

引用来自“snail9527”的评论

BloomFilter如果没有做本地持久化的话,在重启爬虫初始化BloomFilter时,如果已抓取的url量较大,那个初始化过程会非常漫长。建议基于内存映射文件来实现BloomFilter,依然很高效!

很漫长吗?不漫长吧!
0

在广度优先的有限定深度的递归抓取过程中使用hash去重(无论是HashSet还是BloomFilter)这种方式会造成比较严重的漏抓的,原因不是hash冲突,而是某些关键页面被去重而不继续往这个页面的更深一层递归了。网站目录是个树形结构,而爬虫遍历时是个网形结构,如何快速遍历整个网站,也是爬虫要考虑的一个重要方面。可能我表达得不是很清楚。

0

BloomFilter如果没有做本地持久化的话,在重启爬虫初始化BloomFilter时,如果已抓取的url量较大,那个初始化过程会非常漫长。建议基于内存映射文件来实现BloomFilter,依然很高效!

0

增加了BloomFilter去重方式。BloomFilter是一种可以用极少的内存消耗完成大量URL去重的数据结构,缺点是会有少量非重复的URL被判断为重复,导致URL丢失(小于0.5%)。
布隆过滤,有误判。看数据量大小和布隆向量的长度吧~ 优化的好的话应该还是不错的

0

顶一下,新增加的BloomFilter不错

0

pull

0

赞\(≧▽≦)/

顶部