第一步,爬取链接存储到 MongoDB 中 第二步,爬取每个链接的详细信息,存储爬取成功的链接及信息
第二步爬取的过程不会很顺利,有时需要计算未完成的链接,再进行爬取,我目前是这样处理的 把第一步的链接存储在 list 里,再转成集合( set) 把第二步的链接存储在 list 里,再转成集合( set) 未完成的链接 = 第一步的 set - 第二步的 set
遇到的问题是,如果链接数比较小的时候,这样处理速度比较快,当链接数达到几百万时,这样处理的速度不是很理想,请问有没有高效的处理方法呢?
1
regicide 2017-03-16 09:03:35 +08:00 1
用 redis 去重比较粗暴
|
2
Tucao 2017-03-16 09:06:28 +08:00 via Android 5
|
3
caixiexin 2017-03-16 09:07:45 +08:00 via Android 3
布隆过滤器
|
4
JasperYanky 2017-03-16 09:11:17 +08:00 1
最近在爬一个站,第一步的数据存数据库了, django 下面放一个 scrapy 存取去重很方便,第二步用第一步的数据,使用 celery 的 task 定时爬取 我的第二步是下图片 所以开了好几台小机器分开下载的,下载结果直接修改 主数据库;缺点是数据库访问有点频繁,负载有点高~ 感觉 django + scrapy + celery 做类似的项目简直是爽~
|
5
chendajun 2017-03-16 09:23:20 +08:00 1
https://github.com/rolando/scrapy-redis
目前用 redis 去重,抓了微信,微博,网站,视频总共加载一块得 1000+个,用的很丝滑。 |
6
billgreen1 2017-03-16 10:02:46 +08:00 1
@caixiexin 赞, 布隆过滤器是标准做法
|
7
sunchen 2017-03-16 10:22:52 +08:00 2
@billgreen1 bloomfliter 有一定概率产生错误,要看下业务能不能允许这种情况
|
11
wisefree OP @JasperYanky 感谢!
|