(请教)如何提高爬虫的效率/采集速度

2018-01-04 11:55:55 +08:00
 Nick2VIPUser

最近做了一个爬虫任务,大概需要采集百万级的页面。 使用如下技术:

python3
requests
xpath(解析)
多线程(threading)
代理 ip 池(95%有效,10 次 /1s 最多)
redis(请求队列, 去重)
mysql(储存)

同时做好容错处理(重连)/反爬机制应对。 经过几次测试:控制

 [线程数量] 
 [进程数量] 
 [重连等待时间] 
 [报错等待时间] 

得出一组每分钟采集最多数量的方案。 似乎遇到了瓶颈,此时不知道如何去优化采集速度。 没有想到的等会补充。。。 请教有经验的大神指点一下思路!谢谢各位了!!!

10752 次点击
所在节点    程序员
51 条回复
Nick2VIPUser
2018-01-04 19:03:42 +08:00
@qsnow6 您是否了解质量好点的代理 ip,如果方便透露可以讲一下,目前付费购买的这家感觉质量还是提不上来...
qsnow6
2018-01-04 19:10:18 +08:00
WuMingyu
2018-01-04 19:35:12 +08:00
用协程的话可以试试这个 https://github.com/6ugman/ant_nest,速度比 scrapy 快?(不确定,没有精确测试)不过很可能有 bug😅
anasplrt34
2018-01-04 20:33:08 +08:00
爬过十亿级数据的来吐个槽 要想速度快 加机器 加 IP 只有两条路 其他的比如什么优化什么异步多进程多协程线程都没什么作用 就比如一个网站限制单个 IP 一秒访问一次 你代码写出花来一秒也只能请求一次 这不是客户端也不算服务端 这是爬虫最大的问题 所以还是加钱吧
Nick2VIPUser
2018-01-04 20:49:10 +08:00
@qsnow6 谢谢🙏!!
Nick2VIPUser
2018-01-04 20:50:43 +08:00
@anasplrt34 您很幽默,说到点上了,我折腾了一天,现在才想清楚,不过收获很大,谢谢!!
Nick2VIPUser
2018-01-04 20:51:46 +08:00
@WuMingyu 好的,谢谢!今天一天收获了好多好东西😁
easylee
2018-01-04 23:41:45 +08:00
来学习了,Mark~
anexplore
2018-01-04 23:50:58 +08:00
如果你每个线程都要休息 3s 的话,为啥要搞多线程呢?一个线程不就行了嘛,单线程异步 IO + 代理 IP 即可,根据带宽以及代理量控制并发,
PythonAnswer
2018-01-05 00:41:45 +08:00
协程 节约点资源。

不过你的 ip 池质量不行,速度提高不了。
goodryb
2018-01-05 10:54:36 +08:00
为啥不能增加物理资源,开个 10 台机器,效率不就提高 10 倍了,有时候真不要死脑经,先把事情解决了再说。

按照你的说法,假设 1 台主机需要 3 个月( 90 天),提高 10 倍之后,就需要 9 天,一周多就搞完了。

如果你今天在这里问了这么多,回去修改代码,换框架,验证,一周后搞出个新程序来,效率提高了 10 倍,那你需要的时间是 7+9 = 16 天

所以呢,技术不够,机器来凑,云主机按量付费也没多少,如果你爬回来的数据连这点机器的钱都不值得,那我估计更不值得你投入这么大的人力去搞这个东西。

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

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

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

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

© 2021 V2EX