Python 和 go 爬虫对比哪个好? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yanluya
V2EX    问与答

Python 和 go 爬虫对比哪个好?

  •  
  •   yanluya 2021-08-16 17:23:26 +08:00 5274 次点击
    这是一个创建于 1606 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家对比一下 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

    fiypig
        1
    fiypig  
       2021-08-16 17:36:39 +08:00
    好像大部分都用 py
    但我喜欢 go
    biu7
        2
    biu7  
       2021-08-16 17:51:18 +08:00
    两年 py 爬虫一年 go 爬虫一年 go 后端

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

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

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

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

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

    硬要说优点的话就是 go 方便部署运维,python 方便 copy 别人的代码。至于性能,爬虫从来没人在乎编程语言的性能
    yanluya
        10
    yanluya  
    OP
       2021-08-16 19:58:36 +08:00
    懂了,爬虫不关乎编程语言,只关乎网络 io 。
    yanluya
        11
    yanluya  
    OP
       2021-08-16 20:39:45 +08:00 via iPhone
    @biu7 谢谢分享经验
    locoz
        12
    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
        13
    iyear  
       2021-08-16 21:45:25 +08:00
    稍微有点挑战性的爬虫不会用到什么高并发的,一并发大部分都会触发反爬虫机制
    所以现实中的爬虫往往是另一个极端,稍微爬两下就要停好一会儿再爬
    考虑到爬虫库的生态
    应该选 python
    iyear
        14
    iyear  
       2021-08-16 21:49:24 +08:00
    @iyear #13 爬虫经验少,有些说错的,用代理池的话并发这块可以上来了
    pcbl
        15
    pcbl  
       2021-08-16 21:58:59 +08:00 via Android
    go: 老子多线程快的一 b
    py: 已经好了
    yanluya
        16
    yanluya  
    OP
       2021-08-16 22:01:41 +08:00
    @sadfQED2 谢谢分享
    yanluya
        17
    yanluya  
    OP
       2021-08-16 22:04:02 +08:00
    @locoz 经验不少
    locoz
        18
    locoz  
       2021-08-17 03:26:52 +08:00
    @yanluya #17 还好吧,主要接触过的不同公司的人多
    locoz
        19
    locoz  
       2021-08-17 03:48:22 +08:00
    @iyear #13
    其实不是的,个人或者小公司按你说的这么玩玩还行,对于业务盘子大点的公司而言,即使是只有针对少量平台的垂直爬虫,但凡有点要求就会得要高并发,避不开的。而反爬,反而是在摸清楚阈值之后(在每个请求 /请求链都模拟得足够像真实用户的前提下)靠着堆账号、堆 IP 、堆设备就能轻松横向扩展解决的事情,无非就是钱的问题而已。单就 IP 方面而言,一个月花一两万甚至更多钱买高质量家宽 IP 的公司其实都不在少数,很多靠数据吃饭的公司都不会吝啬这点投入。

    而爬虫库的生态,无论是对于舆情那种海量网站的情况还是对于少量但高要求平台的情况,也仍然不能算是重点,因为会用到的比较核心的那些库现在在主流编程语言中都是有的,Python 的优势主要在于一些小的库,比如用来判断一个域名是否合法并切分出顶级域名部分的 tldextract 。但小的那些库即使你懒得按着重写一个,也完全可以通过把它弄成接口或 RPC 的方式来使用,毕竟只做这点事情的话 Python 是没啥压力的。
    locoz
        20
    locoz  
       2021-08-17 03:53:42 +08:00
    @pcbl #15 还好吧,现在 Go 的爬虫框架生态也起来了,简单需求即使没自己的框架,用现成的框架也不会多花多少时间,核心设计都大同小异。要是需求再简单点,那写都没必要写了,直接傻瓜式爬虫工具不香吗。
    iyear
        21
    iyear  
       2021-08-17 12:53:44 +08:00
    @locoz #19 感谢,涨知识了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5605 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 02:44 PVG 10:44 LAX 18:44 JFK 21:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86