如何用Gevent更快速的异步爬取内容

2012 年 9 月 14 日
 cabinw
其实也不一定要用gevent,不过用了gevent之后效果的确不错

情况是这样,从IMDB id tt0000000 到 tt9999999遍历访问一遍豆瓣的电影信息,并保存电影信息。如果只是用线程,然后gevent.joinall(threads),效果好像不是很明显,有什么更好的办法么?

初学gevent,还处于不会的状态
9940 次点击
所在节点    Python
35 条回复
Livid
2012 年 9 月 14 日
Celery or RQ is better for such scenario.
cabinw
2012 年 9 月 14 日
@Livid 3x~
phuslu
2012 年 9 月 14 日
gevent.pool.spawn + httplib2
Brutal
2012 年 9 月 14 日
queue 然后 q.get()
reus
2012 年 9 月 14 日
requests + multiprocessing.Pool
cabinw
2012 年 9 月 14 日
@phuslu @Brutal @reus 感谢给出的各种方案,我都去了解下
btwo
2012 年 9 月 14 日
有测试结果了也请贴出来,一起学习下!
muxi
2012 年 9 月 14 日
muxi
2012 年 9 月 14 日
muxi
2012 年 9 月 14 日
cabinw
2012 年 9 月 14 日
@btwo
cabinw
2012 年 9 月 14 日
@muxi 如此详细,大赞!
sinreal
2012 年 9 月 14 日
额,豆瓣好像限制单个ip访问频率的。楼主可以考虑多个ip慢慢去抓。
cabinw
2012 年 9 月 14 日
@sinreal 我测试用单ip抓了12万数据貌似还没出现问题,不过这的确会是个问题啊
14kscn
2012 年 9 月 14 日
我比较好奇的是 v2ex 可以贴 code 了?
eric_q
2012 年 9 月 14 日
如果爬得过快消耗太多资源,可能会被手动封禁
cabinw
2012 年 9 月 14 日
@eric_q 诶,那真是大问题了
clowwindy
2012 年 9 月 14 日
爬虫的瓶颈不在抓取,在被爬的网站上……一般要爬单个网站的大量数据,要么直接找对方要,要么动用大量 IP……

抓取的性能不是问题,如果爬完全不同的网站,之前用 tornado 那个 async_http_client 写了一个爬虫,开 5 个进程一边爬一边往 HBase 里插,可以达到 2000 QPS。
fanzeyi
2012 年 9 月 14 日
如果楼主可以生成出爬的页面的链接到一个数组里,可以直接用 grequests<https://crate.io/packages/grequests/> 非常好用的异步 URL Fetching 库.

后端是 Gevent ..可以写上 callback 参数 =v=
chendahui007
2012 年 11 月 18 日
@cabinw 可以看看你写的爬豆瓣电影那个么?

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

https://study.congcong.us/t/47669

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

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

© 2021 V2EX