Python 和 go 爬虫对比哪个好?

2021-08-16 17:23:26 +08:00
 yanluya

大家对比一下 python 和 go 爬虫哪个好?从一下几个方面谈谈

1.执行速度 2.编码的复杂度 3.对 html 页面的处理容易度 4.操作数据库

附上两个案例: Go 爬虫: https://blog.csdn.net/u012997396/article/details/119733162 Python 爬虫: https://blog.csdn.net/u012997396/article/details/119719286

4026 次点击
所在节点    问与答
21 条回复
fiypig
2021-08-16 17:36:39 +08:00
好像大部分都用 py
但我喜欢 go
biu7
2021-08-16 17:51:18 +08:00
两年 py 爬虫一年 go 爬虫一年 go 后端

1. 执行速度从来都不是瓶颈,所以还真没对比过
2. 无疑 py 写起来更简单且轮子多,但是 go 写习惯了也很顺手
3. 这个我选 py
4. 都差不多
Morriaty
2021-08-16 17:52:18 +08:00
没怎么用过 go 的爬虫框架,但想一想,相比于网络 IO 耗时,程序本身的执行速度并没有太多比较的意义吧
so1n
2021-08-16 17:53:17 +08:00
很多时候爬虫对执行速度都没啥要求...太快更容出事
herozzm
2021-08-16 17:54:29 +08:00
go 多线程爽的一 p
ShuoHui
2021-08-16 17:55:29 +08:00
看你做什么爬虫了…一般爬虫对执行速度要求不高,我基本都用 python,就是轮子多写的快。
shyling
2021-08-16 18:00:06 +08:00
个人觉得 js 大法最好(虽然跑题了

速度还可以,处理 gbk 略蛋疼(其他还好),html 操作方便,还有 node:vm 这个天生神技,操作数据库也挺方便。
qq976739120
2021-08-16 18:12:43 +08:00
爬虫的瓶颈一般是网络 io
sadfQED2
2021-08-16 18:51:21 +08:00
https://github.com/Jinnrry/getAwayBSG

刚好我有个项目,Go 和 python 各写了一遍。单纯实现功能的话,都没问题。

golang 现在也有很多 html 解析器,也有爬虫框架,虽然没有 python 多,但是也勉强可以一战。

Python 优势是现成你能找到的 demo 全是 py 的,很多网站的爬虫程序直接 copy 过来就能用。

硬要说优点的话就是 go 方便部署运维,python 方便 copy 别人的代码。至于性能,爬虫从来没人在乎编程语言的性能
yanluya
2021-08-16 19:58:36 +08:00
懂了,爬虫不关乎编程语言,只关乎网络 io 。
yanluya
2021-08-16 20:39:45 +08:00
@biu7 谢谢分享经验
locoz
2021-08-16 21:40:57 +08:00
看性能相关的需求选择就行了,2 、3 、4 压根不是爬虫的重点,而且实际这三个部分在不同语言中也都大同小异,所以实际影响选择的只有性能。

Python 的资源占用是必然会比 Go 高的,并且整体的执行速度也比 Go 慢,而请求部分即使用了 asyncio+uvloop+aiohttp 这样的组合也还是会比 Go 慢一些,这都是很显而易见的事情。所以选择起来其实很简单,如果你的并发量或数据时效要求已经达到了 Python 有点资源耗费过高或力不从心的情况,那就果断将部分模块剥离出来用 Go 来做,甚至是完全切到 Go 上做;但如果你只是少量玩玩,那你爱用啥用啥,只要你写着舒服就行。

至于楼上说爬虫不在乎编程语言的性能、只在乎网络 IO 的,很明显都没接触过真正量大的情况...哪怕是就单纯的垂直爬虫搞几个大平台,Python 和 Go 都会出现明显的差距,无论是执行速度还是 CPU 、内存、存储空间占用情况都非常明显。至于网络 IO ?反而不会是重点,因为即使网络方面的速度再慢,靠着高并发也一样可以轻松盖住,这方面你需要担心的仅仅是搞 IP 的钱够不够而已,下行带宽又不贵。

另外,demo 都是 python 的也不是啥显著优势,网上很多这种 demo 的代码都只能说是稀烂,对目标平台的反爬处理更是稀碎,再加上如果是完整流程都 copy 的话必然会涉及到框架的区别问题,而如果只是取请求这种关键部分的话,copy 到 Go 里改一下也一样能用,反正关键逻辑都差不多,费不了多少事...
iyear
2021-08-16 21:45:25 +08:00
稍微有点挑战性的爬虫不会用到什么高并发的,一并发大部分都会触发反爬虫机制
所以现实中的爬虫往往是另一个极端,稍微爬两下就要停好一会儿再爬
考虑到爬虫库的生态
应该选 python
iyear
2021-08-16 21:49:24 +08:00
@iyear #13 爬虫经验少,有些说错的,用代理池的话并发这块可以上来了
pcbl
2021-08-16 21:58:59 +08:00
go: 老子多线程快的一 b
py: 已经好了
yanluya
2021-08-16 22:01:41 +08:00
@sadfQED2 谢谢分享
yanluya
2021-08-16 22:04:02 +08:00
@locoz 经验不少
locoz
2021-08-17 03:26:52 +08:00
@yanluya #17 还好吧,主要接触过的不同公司的人多
locoz
2021-08-17 03:48:22 +08:00
@iyear #13
其实不是的,个人或者小公司按你说的这么玩玩还行,对于业务盘子大点的公司而言,即使是只有针对少量平台的垂直爬虫,但凡有点要求就会得要高并发,避不开的。而反爬,反而是在摸清楚阈值之后(在每个请求 /请求链都模拟得足够像真实用户的前提下)靠着堆账号、堆 IP 、堆设备就能轻松横向扩展解决的事情,无非就是钱的问题而已。单就 IP 方面而言,一个月花一两万甚至更多钱买高质量家宽 IP 的公司其实都不在少数,很多靠数据吃饭的公司都不会吝啬这点投入。

而爬虫库的生态,无论是对于舆情那种海量网站的情况还是对于少量但高要求平台的情况,也仍然不能算是重点,因为会用到的比较核心的那些库现在在主流编程语言中都是有的,Python 的优势主要在于一些小的库,比如用来判断一个域名是否合法并切分出顶级域名部分的 tldextract 。但小的那些库即使你懒得按着重写一个,也完全可以通过把它弄成接口或 RPC 的方式来使用,毕竟只做这点事情的话 Python 是没啥压力的。
locoz
2021-08-17 03:53:42 +08:00
@pcbl #15 还好吧,现在 Go 的爬虫框架生态也起来了,简单需求即使没自己的框架,用现成的框架也不会多花多少时间,核心设计都大同小异。要是需求再简单点,那写都没必要写了,直接傻瓜式爬虫工具不香吗😂。

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

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

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

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

© 2021 V2EX