Python 爬虫改成 go,性能提高 5 倍?

2018-12-03 09:28:17 +08:00
 sagaxu
https://zhuanlan.zhihu.com/p/48254385
17878 次点击
所在节点    Python
107 条回复
fiht
2018-12-03 12:41:27 +08:00
实习的时候写了将近一年的爬虫,大概有这么一点感悟。
在做定向爬虫到时候,比如说抓一抓机票网站的价格,需要突破一些反爬虫机制,或者需要使用无头浏览器做渲染。这种场景下语言不存在性能瓶颈,瓶颈在于对方的服务器压力和反爬虫机制。这种场景适合使用 Python。
但是在做广度爬虫的时候,Python 就不适用了,就像楼上讲的 scrapy 单核跑满的问题。在这个场景下使用 Python 会带来很多的问题,比如说为了解决只有单核跑完的问题就需要起多个 scrapy 实例,为了让这多个 scrapy 实例协同工作就需要引入一个消息队列,整个系统的耦合度就复杂了不少。用 golang 来做的话就方便很多。几个爬行时的 goroutine 和几个 pipeline 的 goroutine,整个系统就能稳定地运转起来。这是 Python 所不能达到的。
DeWhite
2018-12-03 12:48:12 +08:00
抓的快了不是等反么。。
vdo
2018-12-03 12:51:40 +08:00
老板不涨工资的话,能用 py 就用 py
dbow
2018-12-03 12:51:40 +08:00
不用 scrapy 就好了,python 写的 event loop 也能轻松做到 1w/s 请求。
觉得 python I/O 不行是水平问题。
xhp281
2018-12-03 13:06:58 +08:00
RqPS6rhmP3Nyn3Tm
2018-12-03 13:13:37 +08:00
爬虫最困难的不是研究反爬机制吗,io 我觉得不是最重要的因素
Linxing
2018-12-03 13:41:11 +08:00
并发有什么了不起的 Python 不支持?
sgissb1
2018-12-03 14:10:38 +08:00
爬虫玩过一段时间,也在有几个稳定爬取的地方。

也用 scrapy,用 python 写。python 性能好不好不好讲,主要是每次启动 scrapy 太慢了(要生成 pyd 缓存),另外熟悉了 scrapy 后,做一下简单爬虫还是可以的,做复杂的(比如怕动态页面)就很难受了,需要引入其他解析库( scrapy 自带那几个基本不够用),因为是 python 菜鸡,感觉调起爬虫代码来,很是难受。
marcushbs
2018-12-03 14:18:22 +08:00
用过 scrapy/portia/puppeteer,遇到的有效反爬机制有两种:
1. 封 IP
2. captcha
第一个只能用大规模部署的有独立 ip 的爬虫网络来解决,interval 的设置和数据存储 /合并需要有效调度;
第二个颇为复杂,取决于 captcha 的设计:简单的识图可以通过一些库甚至 ml 来解决(比如 V2EX 的登录认证码ε=ε=ε=┏(゜ロ゜;)┛); 12306 或者 google captcha 那种需要让人点选 9 张里 N 张甚至让人算个微积分的,可以用 headless chrome 的截图机制(甚至 copy/paste DOM 重现),另一头连通到类似 Amazon Mechanical Turk 人肉智能服务上,还要对正确率和审核手段做调整。

随着爬与反爬的不断斗争,针对 captcha 的工具库会不断增大和复杂,但新反爬模式总可以通过连接人肉服务解决
——综上,爬虫主要就是解决 1.分布式调度 2.和人肉服务的对接。至于单点性能,基本不算问题。
petelin
2018-12-03 14:33:47 +08:00
要是趴下来直接扔到缓存里,或者扔到流里, 用 Python 是没问题.
关键是, 你的业务就那么简单吗, 不需要解析吗? 单单一个解析是可以把 CPU 跑到 100%的好不好
revol
2018-12-03 14:38:00 +08:00
@petelin 密集计算的部分当然用 C 扩展啊,xpath,beautifulsoup 之类的。反正绝对不会比 go 慢
kakudesu
2018-12-03 14:59:53 +08:00
别问,问就是 404
karllynn
2018-12-03 15:13:36 +08:00
404 了,一般爬虫用 Python 肯定够了,Python 性能差你多开几个进程啊…
tailf
2018-12-03 15:16:34 +08:00
才五倍,应该分分钟五十倍啊
geying
2018-12-03 15:22:40 +08:00
来看评论
jdgui
2018-12-03 15:24:40 +08:00
zhongyiio
2018-12-03 15:25:33 +08:00
@congeec 点赞有人性
petelin
2018-12-03 16:21:26 +08:00
@revol python 天下第一
XIVN1987
2018-12-03 16:25:49 +08:00
@petelin
数据分析有 numpy、pandas,matplotlib,sklearn 底层都是 C 写的,效率很高
locoz
2018-12-03 16:31:37 +08:00

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

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

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

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

© 2021 V2EX