V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yanluya
V2EX  ›  问与答

Python 和 go 爬虫对比哪个好?

  •  
  •   yanluya · 105 天前 · 1307 次点击
    这是一个创建于 105 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家对比一下 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   105 天前
    好像大部分都用 py
    但我喜欢 go
    biu7
        2
    biu7   105 天前
    两年 py 爬虫一年 go 爬虫一年 go 后端

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

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

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

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

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

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

    而爬虫库的生态,无论是对于舆情那种海量网站的情况还是对于少量但高要求平台的情况,也仍然不能算是重点,因为会用到的比较核心的那些库现在在主流编程语言中都是有的,Python 的优势主要在于一些小的库,比如用来判断一个域名是否合法并切分出顶级域名部分的 tldextract 。但小的那些库即使你懒得按着重写一个,也完全可以通过把它弄成接口或 RPC 的方式来使用,毕竟只做这点事情的话 Python 是没啥压力的。
    locoz
        20
    locoz   105 天前
    @pcbl #15 还好吧,现在 Go 的爬虫框架生态也起来了,简单需求即使没自己的框架,用现成的框架也不会多花多少时间,核心设计都大同小异。要是需求再简单点,那写都没必要写了,直接傻瓜式爬虫工具不香吗😂。
    iyear
        21
    iyear   104 天前
    @locoz #19 感谢,涨知识了
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2035 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:31 · PVG 08:31 · LAX 16:31 · JFK 19:31
    ♥ Do have faith in what you're doing.