nutch2.2.1抓取时对已经抓取过的数据重复抓取

陈lay 发布于 2016/07/25 18:24
阅读 540
收藏 0

@S2JH 你好,最近在nutch2.2.1开发使用时,发现了一个问题,请教一下您:

问题描述:出现重复抓取现象,即第二次抓取时会将第一次抓取的数据再抓取一遍,第三次抓取时会将第一次、第二次抓取的数据再抓取一遍,总之就是本次抓取会将新数据和前面已经抓取过的数据再抓取一遍;(urls里面有一个链接,第一次抓取时抓取urls里面的链接,解析此链接产生50条数据并存入数据库,第二次抓取时应该只抓取刚产生的50条数据才对,但是却抓取了数据库中的所有数据51条,即第一次抓取的数据又抓取了一遍;第二次抓取数据产生了100条数据并存入数据库,第三次抓取理论上应该是抓取第二次抓取时产生的数据,但是同样是抓取了数据库中所有的数据,将第一次、第二次抓取的数据又抓取了一遍,就这样一直重复抓取,影响了速度,而且页面解析时会出现重复数据,这个问题怎么解决呢

加载中
0
EntDIY
EntDIY
爬虫的基本模式就是不断递归的获取页面内容并同时提取outlink然后追加到下一处理集合。你这个问题我不确定是不是nutch本身的设计规则不符合你的需求。
陈lay
陈lay
还有一个问题请教一下您:在nutch2.x中数据库有三个列:上次抓取时间、抓取间隔、下次抓取时间;我看源码在运行时,在新数据储存到数据库时的下次抓取时间设置为当前时间,这一部分是合理的,但是在本条数据抓取之后,理论上下次抓取时间不应该设置为上次抓取时间加时间间隔吗,但是还是设置成了当前时间,想问一下这是怎么回事。还有就是这三个字段在什么地方用到的,我没有发现这三个字段起到了什么作用; 谢谢!
0
陈lay
陈lay

引用来自“S2JH”的评论

爬虫的基本模式就是不断递归的获取页面内容并同时提取outlink然后追加到下一处理集合。你这个问题我不确定是不是nutch本身的设计规则不符合你的需求。

1、这一个我现在的解决办法是修改了源码,按照debug模式下batchId生成的规则,在GeneratorJob时按规则生成了batchId,然后在crawler的for循环抓取中,设置batchId参数,这样在FetcherJob和ParserJob时会抓取、解析指定batchId的数据,从而解决了重复问题,但是不知道这样做会存在哪些隐患,是否违背了nutch的原则;
2、还有一个问题请教一下您:在nutch2.x中数据库有三个列:上次抓取时间、抓取间隔、下次抓取时间;我看源码在运行时,在新数据储存到数据库时的下次抓取时间设置为当前时间,这一部分是合理的,但是在本条数据抓取之后,理论上下次抓取时间不得设置为上次抓取时间加时间间隔吗,但是还是设置成了当前时间,想问一下这边是怎么回事。还有就是这三个字段在什么地方用到的,我没有发现这三个字段起到了什么作用;
谢谢!@S2JH

返回顶部
顶部