Scrapy增量爬网可过滤重复的项目

时间:2018-01-31 13:01:02

标签: python scrapy web-crawler

我想定期运行Scrapy以获取所有新内容。已产生的项目存储在数据库中。什么是最好的方法来验证,当Scrapy再次爬行时,已经产生的项目不会存储为重复项?

给项目散列是​​一种验证这个的好方法吗?我不希望最终在我的数据库中出现重复项目。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您要在不同的抓取之间同时抓取项目,那么在TomášLinhart推荐的管道中检查数据库是否是一个有意义的选择。

否则,我认为在scrapy范围内执行复制过程是更好的选择。 例如,社区提供的scrapy-deltafetch,用于过滤蜘蛛中间件中的重复项以进行增量(delta)爬网。

DeltaFetch通过拦截蜘蛛回调中生成的每个Item和Request对象来工作。对于Items,它计算相关的请求标识符(a.k.a. fingerprint)并将其存储到本地数据库(嵌套)中。对于请求,Deltafetch计算请求指纹并丢弃请求(如果它已存在于数据库中)。

正确安装和配置此插件之后。然后运行抓取工具并查看Scrapy最后记录的统计信息。您可以看到有关deltafetch的新添加项目。

2017-12-25 16:36:17 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'deltafetch/skipped': 88,
 'deltafetch/stored': 262,
 'downloader/request_count': 286,
 'finish_reason': 'finished',
  ...
 'item_scraped_count': 262,
  ...
}