1
chanchan 2018-12-03 09:34:00 +08:00
别问问就是 python 牛逼
|
2
aa514758835 2018-12-03 09:34:32 +08:00
萌新不懂,我也看了这篇文章,我记得 python 好像也可以并行处理吧~
|
3
notreami 2018-12-03 09:38:26 +08:00
没加代理,无所谓性能
|
4
zarte 2018-12-03 09:40:18 +08:00
首先静态语言应该会好点,但是没专门对比过。
然后他这个有筛选的爬应该会用到正则或者字符串匹配。 正则这个对时间影响很大具体语言自带的都不一样。 |
5
lekai63 2018-12-03 09:40:26 +08:00
爬虫瓶颈不是应该在网络这块么?
感觉预期应该是 go 和 python 差不多速度才对呀。。 |
6
windfarer 2018-12-03 09:42:12 +08:00
python 代码质量不高,同步写数据库,能快就怪了
|
7
gesse 2018-12-03 09:42:29 +08:00
爬虫很大时候性能瓶颈在网络
就像如果不换固态硬盘,cpu 在一定范围内, 整体性能是差不多的。 |
8
x7395759 2018-12-03 09:45:47 +08:00
别问,问就是人生苦短,我用 python
|
9
congeec 2018-12-03 09:48:42 +08:00 via iPhone 2
我曾经也以为爬虫的瓶颈在 io,直到我用了 scrapy,CPU 常年某个核心 100%。单核异步,没法优化。
python 单核异步一条道走到黑,gvr 老爷子们以为大家都只写 web 后端呢? python 要死在这条道上 |
10
kidlfy 2018-12-03 09:48:45 +08:00
他数据库存储是同步的呀...说实话 我还没见过 scrapy 存数据库 这个步骤是写在 spider 里的....
|
11
chengxiao 2018-12-03 09:48:54 +08:00
爬虫的性能.....难道不是看代理速度么?
|
12
cuixiao603 2018-12-03 09:50:19 +08:00 via Android
别问 问就是你这个 python 水平不行
|
13
congeec 2018-12-03 09:51:54 +08:00 via iPhone
2008 年到现在,也就 asyncio 亮眼点,JIT、GIL 毫无改进,一点诚意都没有(不要跟我说 pypy,cffi 烦死人)。人家 ruby2.6 都有官方 jit 了。
|
14
so1n 2018-12-03 09:52:56 +08:00
在知乎的评论不堪入目
|
15
memorycancel 2018-12-03 09:53:14 +08:00
瓶颈在被爬取网站的反扒机制,你爬虫性能再好都没屌用,甚至适得其反。
|
16
bonfy 2018-12-03 09:54:38 +08:00
@memorycancel 适得其反 精髓了
|
17
gamecreating 2018-12-03 09:56:00 +08:00
是的,用 C 多线程写 速度更快.
但是你们追求的采集快 还是开发快呢? 场景不同 不能一概而论 |
18
poplar50 2018-12-03 09:57:36 +08:00 via Android
网络 io 觉得 python 并不虚
|
19
agdhole 2018-12-03 10:06:53 +08:00
知乎核心业务 python 转 go: https://zhuanlan.zhihu.com/p/48039838
|
20
qwertty01 2018-12-03 10:10:32 +08:00
@memorycancel 爬的越快,封的越快
|
21
keysona 2018-12-03 10:16:50 +08:00
go 抓取内容,python 解析入库。
|
22
myyou 2018-12-03 10:17:05 +08:00
别问问就是 python 不行,跟人是不是彩笔,是不是用的不对没有关系
|
23
lxy42 2018-12-03 10:17:47 +08:00 3
各位还是看了代码再发表评论吧,Python 爬虫竟然是一条一条数据同步保存到 MySQL。
https://github.com/lidingke/go_python_crawler_benchmark/blob/master/py_get.py#L20-L31 另外,把 mysql 换成 mysqlclient 速度又能快不少。 |
24
GoLand 2018-12-03 10:25:54 +08:00 7
现在有些人会写个 `print("hello world")` 就觉得自己掌握了 Python,自己不会用还怪语言慢,怪就算了,还到处张扬自己的愚蠢,写这文章的人是天生缺关注想要博关注?这不是在搞笑吗.........代码都经不起人 review 说个 jb。
|
25
ivechan 2018-12-03 10:28:16 +08:00
这个对比,我也是服气的。
一个框架, 一个手写调度,起码得保证代码的基本逻辑一致才有比较的意义吧? 看前面,居然还有 Python 同步保存到数据库这种操作。 多说一句,Python 是性能差,那也得看场景啊,像(大多数)爬虫都是 I/O 密集型的任务,Python 毫无疑问可以胜任。 |
26
Vegetable 2018-12-03 10:31:38 +08:00
这对比好蛋疼...玛莎拉蒂能跑三百,我有必要买吗?
|
27
ipwx 2018-12-03 10:32:03 +08:00
@lxy42 单核带锁用 MySQL 确实是巨大黑点。
但是话说回来,如果你用很 advanced 的技术优化了 Python 程序(我倒也是想到了很多方案,不过没做过),那么 Python 唯一一条远好于 Go 的优势、写起来容易,不是不成立了吗?就算你作为资深 Python 程序员能够优化到这种程度,但是那也只是和 Go 平起平坐而已吧。。。 利益相关:不会 Go,Python 老手吧。。 |
28
www5070504 2018-12-03 10:33:32 +08:00 2
... 不知道说啥好 这种 io 任务 时间大多浪费在 io 等待上 谈什么语言性能 在搞笑吧
|
29
NaVient 2018-12-03 10:34:57 +08:00
难道你们都没看到源码里 爬一条就对数据库进行 IO 的神操作吗?
|
30
xpresslink 2018-12-03 10:35:18 +08:00 1
最重要的问题是:
爬虫的最大痛点不是速度,而是突破反爬。 其次的痛点,50%以上的爬虫任务是一次性的。 另外不断尝试方案和调试是爬虫开发花费的主要精力。 最后是爬虫相关的库和生态丰富程度是必然要考虑的。 从这些点上来说作为不单是 Go,所有静态语言的来写爬虫是相对比较难受的。动态语言 Python 几乎就是爬虫的同义词,这不是偶然的。 |
31
est 2018-12-03 10:41:23 +08:00 1
把 scrapy 按在地上揍了一顿。不过瘾,怎么办?把 python 放进标题里。
|
33
nuansediao 2018-12-03 10:46:41 +08:00
才快 5 倍,算不上吊打。。。也不够唬人,至少提高个几十倍的吧。
|
34
wangxiaoaer 2018-12-03 10:46:58 +08:00
说实在的,感觉这种评价参考意义并不大,scrapy 是一个大的爬虫框架,文中的 go 应用算是一个定向爬虫,功能复杂性没法比。如果不基于 scrapy,和 go 一样重写一个定向抓取的应用,相互比对,才有意义吧。
|
35
lxy42 2018-12-03 10:47:02 +08:00
@ipwx #27 过早的优化是万恶之源。如果项目一开始就对性能(实时性)有非常高的要求,那么 Python 确实不是首选。如果一开始对性能没有很高的要求,选择 Python 无疑可以提高开发速度,后期遇到性能问题,也是可以通过 C 扩展等其它手段去优化。
|
36
clino 2018-12-03 10:47:21 +08:00
文章作者看到 11 分 和 45 秒 这种级别的差异就没有怀疑一下自己的代码写法吗?
何况这又不是 CPU 密集型的 |
37
kaohaonan6666 2018-12-03 10:55:28 +08:00
IO 密集型 你用 c 写 提高幅度也不大
|
38
locoz 2018-12-03 10:57:21 +08:00 via Android
不存在的,真的写起来的时候这种简单网站的简单需求根本不需要用框架,requests+多进程或者 asyncio+aiohttp 怼就完事了,整个代码写下来最多就十几行。
跑起来之后大部分时间都在等待网络 io,这需求又没有要对数据做预处理,速度根本差不了多少,所以开发时间和爬的时间加起来还是 Python 比较快😂😂 |
39
xpresslink 2018-12-03 11:04:32 +08:00
@nuansediao 当年有个人对比了 C 和 Python 写的空循环性能,得到了比这个厉害的结论。
|
40
hpeng 2018-12-03 11:10:26 +08:00 via iPhone
打个比喻,约等于用 py 写睡眠排序,跟用 go 写快排,然后说吊打…
|
41
tt67wq 2018-12-03 11:13:23 +08:00
这种人也算程序员系列?
|
43
stackexplode 2018-12-03 11:18:12 +08:00
一天到晚研究鄙视链的人,水平真的。。
|
44
zhongyiio 2018-12-03 11:21:27 +08:00 via Android
话说爬虫主要看对方的性能吧,你性能再高,对方一爬就挂,哈哈哈
|
45
2225377fjs 2018-12-03 11:24:08 +08:00
python 确实慢这是客观存在的,执行效率上与 golang 存在明显的差距。
只将爬虫当成是 IO 密集型的,也多半是小白 |
48
qsnow6 2018-12-03 11:34:58 +08:00
IO 密集型的,扯再多也没鬼用;
scrapy 每分钟单机单核超过 3000 请求 /分钟,这速度平时做定向爬虫根本都用不上。分分钟被服务器拉黑,不拉黑也抓挂了。 如果还有杠精在这扯,说明平时接触爬虫不够深入。 |
49
janus77 2018-12-03 11:37:30 +08:00
文章看不了了?没有知识的荒原
|
50
brucedone 2018-12-03 11:41:16 +08:00
https://github.com/lidingke/go_python_crawler_benchmark/blob/master/py_get.py ,看到了熟悉的 lock,也不知道这个该怎么说了。
|
51
wangxiaoaer 2018-12-03 11:43:07 +08:00
@janus77 #49 你们不要这样,作者估计受不了删文章了吧。
|
52
xpresslink 2018-12-03 11:44:22 +08:00
@janus77 我刚发一条打脸评论,结果。。。
|
53
Keyes 2018-12-03 11:47:19 +08:00
@xpresslink 结果来到了荒原 23333
|
54
jjx 2018-12-03 11:52:12 +08:00
一个编译型静态类型的语言 每天 就知道同一个解释型动态语言 比性能
脸都放哪里去了 |
55
tnt666666 2018-12-03 11:56:41 +08:00 via Android
是的,go 是最吊的,吊打 Python
|
56
wdv2ly 2018-12-03 12:17:47 +08:00
这不算啥,我写一个代理工具,在垃圾小鸡上跑,cpu 负载 60%左右,加密模块用 c “翻译”下,cpu 负载降到 2-3%,算下来效率提高了 20-30 倍
|
57
Leigg 2018-12-03 12:22:56 +08:00 via iPhone
做爬虫,python 足够了,换再快的语言也没用,懂的人自然懂。
|
58
labulaka 2018-12-03 12:31:32 +08:00 via Android
404 了🌚
|
59
qdzzyb 2018-12-03 12:34:30 +08:00
原文 404 了
|
60
xiaqi 2018-12-03 12:37:31 +08:00 via Android
当年,说 php 是世界最好的论坛炸开了锅。如今,说 Go 爬虫性能吊打 Python,论坛炸开了锅。
文章的作者应该已经在和妹子约会了吧?😂😂😂 |
61
fiht 2018-12-03 12:41:27 +08:00 4
实习的时候写了将近一年的爬虫,大概有这么一点感悟。
在做定向爬虫到时候,比如说抓一抓机票网站的价格,需要突破一些反爬虫机制,或者需要使用无头浏览器做渲染。这种场景下语言不存在性能瓶颈,瓶颈在于对方的服务器压力和反爬虫机制。这种场景适合使用 Python。 但是在做广度爬虫的时候,Python 就不适用了,就像楼上讲的 scrapy 单核跑满的问题。在这个场景下使用 Python 会带来很多的问题,比如说为了解决只有单核跑完的问题就需要起多个 scrapy 实例,为了让这多个 scrapy 实例协同工作就需要引入一个消息队列,整个系统的耦合度就复杂了不少。用 golang 来做的话就方便很多。几个爬行时的 goroutine 和几个 pipeline 的 goroutine,整个系统就能稳定地运转起来。这是 Python 所不能达到的。 |
62
DeWhite 2018-12-03 12:48:12 +08:00
抓的快了不是等反么。。
|
63
vdo 2018-12-03 12:51:40 +08:00
老板不涨工资的话,能用 py 就用 py
|
64
dbow 2018-12-03 12:51:40 +08:00
不用 scrapy 就好了,python 写的 event loop 也能轻松做到 1w/s 请求。
觉得 python I/O 不行是水平问题。 |
65
xhp281 2018-12-03 13:06:58 +08:00
|
66
RqPS6rhmP3Nyn3Tm 2018-12-03 13:13:37 +08:00 via iPhone
爬虫最困难的不是研究反爬机制吗,io 我觉得不是最重要的因素
|
67
Linxing 2018-12-03 13:41:11 +08:00
并发有什么了不起的 Python 不支持?
|
68
sgissb1 2018-12-03 14:10:38 +08:00
爬虫玩过一段时间,也在有几个稳定爬取的地方。
也用 scrapy,用 python 写。python 性能好不好不好讲,主要是每次启动 scrapy 太慢了(要生成 pyd 缓存),另外熟悉了 scrapy 后,做一下简单爬虫还是可以的,做复杂的(比如怕动态页面)就很难受了,需要引入其他解析库( scrapy 自带那几个基本不够用),因为是 python 菜鸡,感觉调起爬虫代码来,很是难受。 |
69
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.和人肉服务的对接。至于单点性能,基本不算问题。 |
70
petelin 2018-12-03 14:33:47 +08:00
要是趴下来直接扔到缓存里,或者扔到流里, 用 Python 是没问题.
关键是, 你的业务就那么简单吗, 不需要解析吗? 单单一个解析是可以把 CPU 跑到 100%的好不好 |
72
kakudesu 2018-12-03 14:59:53 +08:00
别问,问就是 404
|
73
karllynn 2018-12-03 15:13:36 +08:00
404 了,一般爬虫用 Python 肯定够了,Python 性能差你多开几个进程啊…
|
74
tailf 2018-12-03 15:16:34 +08:00
才五倍,应该分分钟五十倍啊
|
75
geying 2018-12-03 15:22:40 +08:00
来看评论
|
76
jdgui 2018-12-03 15:24:40 +08:00
|
79
XIVN1987 2018-12-03 16:25:49 +08:00
@petelin
数据分析有 numpy、pandas,matplotlib,sklearn 底层都是 C 写的,效率很高 |
80
locoz 2018-12-03 16:31:37 +08:00 1
|
82
quqiuzhu 2018-12-03 16:41:29 +08:00 via Android
人生苦短,我用 python。说的就是你们天天优化优化,老子自己写得爽就行了,性能不好多加几台机器就是。
|
83
yc8332 2018-12-03 16:58:18 +08:00
性能瓶颈不是应该在数据库吗?
|
84
rizon 2018-12-03 17:06:54 +08:00
我不是很懂 python,但是 python 很火是毋庸置疑的,但是有件事我不明白,希望有大佬解答。
既然 python 是单核,性能有瓶颈,为什么还这么火?尤其是云计算方面,这个单核的问题不是问题吗? 网上看到的描述 贴一下 18 年 12 月的排行 |
86
troywinter 2018-12-03 17:11:34 +08:00
@est cpu 密集型,numpy 和 c++不相上下,都是调 mkl 的库,没什么区别。
|
87
xiaqi 2018-12-03 17:12:55 +08:00 via Android
那些老说 python 性能渣的,你倒是用 go 写个比 python 的 numpy 性能更高的库出来呀?
🐶🐶🐶 |
88
beforeuwait 2018-12-03 17:13:56 +08:00
@memorycancel 十分同意
|
89
beforeuwait 2018-12-03 17:16:34 +08:00
@Leigg 来,握个爪
|
90
qilishasha 2018-12-03 17:18:22 +08:00
……反正用到的地方有限,管你是什么语言,会什么我就用什么。
|
91
qsnow6 2018-12-03 17:22:26 +08:00
@rizon #84 首先,任何语言的性能都是有瓶颈的,得看具体的数值,不存在有一门语言能在单机状态下抗下天猫双 11 的流量。
其次,python 止于大部分静态语言( C、GO ),确实性能没有他们的单机性能高,这是所有动态语言的劣势,先天的,为了 code 的易用性和效率,牺牲了部分性能。 python 之所以能在这么多领域开枝散叶,很大程序上利益于他的易用性,随便敲几行代码,一个爬虫就写好了,不管管类型这些静态语言语法的束缚,简直太舒服了。 |
93
qsnow6 2018-12-03 17:29:44 +08:00
性能够用就好,经常看到建博客的,日均 IP 不到 200,却在发愁以后怎么面对千万级的并发,到底该选哪门语言
|
95
lazyfighter 2018-12-03 17:53:48 +08:00
@qsnow6 没毛病 哈哈
|
96
LawlietZ 2018-12-03 18:06:48 +08:00
怎么 404 了
|
97
JCZ2MkKb5S8ZX9pq 2018-12-03 18:07:28 +08:00
看了楼上的评论,python 爬虫同时写入 mongo 的瑟瑟发抖……
|
99
est 2018-12-03 18:09:29 +08:00
@qilishasha
> 为了 code 的易用性和效率,牺牲了部分性能。 也不能完全这样说。主要是几个 core dev 不接受 给 CPython 提速的补丁。。。 php7 你看那速度。。ruby3x3 你看那速度。。。就连 perl6 也提速了。 p 家的,就剩 py 没把提速放到第一核心重点了。 |