Python 爬虫时如何高效的链接去重

2017-03-16 08:54:42 +08:00
 wisefree

第一步,爬取链接存储到 MongoDB 中 第二步,爬取每个链接的详细信息,存储爬取成功的链接及信息

第二步爬取的过程不会很顺利,有时需要计算未完成的链接,再进行爬取,我目前是这样处理的 把第一步的链接存储在 list 里,再转成集合( set) 把第二步的链接存储在 list 里,再转成集合( set) 未完成的链接 = 第一步的 set - 第二步的 set

遇到的问题是,如果链接数比较小的时候,这样处理速度比较快,当链接数达到几百万时,这样处理的速度不是很理想,请问有没有高效的处理方法呢?

3094 次点击
所在节点    Python
12 条回复
regicide
2017-03-16 09:03:35 +08:00
用 redis 去重比较粗暴
Tucao
2017-03-16 09:06:28 +08:00
caixiexin
2017-03-16 09:07:45 +08:00
布隆过滤器
JasperYanky
2017-03-16 09:11:17 +08:00
最近在爬一个站,第一步的数据存数据库了, django 下面放一个 scrapy 存取去重很方便,第二步用第一步的数据,使用 celery 的 task 定时爬取 我的第二步是下图片 所以开了好几台小机器分开下载的,下载结果直接修改 主数据库;缺点是数据库访问有点频繁,负载有点高~ 感觉 django + scrapy + celery 做类似的项目简直是爽~
chendajun
2017-03-16 09:23:20 +08:00
https://github.com/rolando/scrapy-redis
目前用 redis 去重,抓了微信,微博,网站,视频总共加载一块得 1000+个,用的很丝滑。
billgreen1
2017-03-16 10:02:46 +08:00
@caixiexin 赞, 布隆过滤器是标准做法
sunchen
2017-03-16 10:22:52 +08:00
@billgreen1 bloomfliter 有一定概率产生错误,要看下业务能不能允许这种情况
wisefree
2017-03-16 11:12:16 +08:00
@regicide 谢啦,我去查查这方面的资料
wisefree
2017-03-16 11:12:30 +08:00
@Tucao 十分感谢!
wisefree
2017-03-16 11:12:55 +08:00
@caixiexin 谢啦!:)
wisefree
2017-03-16 11:13:21 +08:00
@JasperYanky 感谢!
wisefree
2017-03-16 11:13:38 +08:00
@chendajun 我去研究一下,谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/347801

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX