事情的起源是我和一个工程师聊天。我在想,为什么会有人使用excel这种奇怪的技术抓取表格?聊着聊着,我们就聊到了Python在爬虫领域弱势的一面。在资源受限的情况下,实现大规模稳定的爬虫,完成企业级每天破亿次采集的数据需求。Go语言在这种情况下,居然能大展拳脚。当然他没有说工作中的细节,这是保密的,只是说到了这项技术的可行性。
总览
先说说爬虫这项技术在各个编程语言中的粗略占比
-
研究表明,市面上的爬虫技术主要使用 Python、JavaScript (Node.js)、Ruby、Java、C/C++/C#、Go 和 PHP。
-
根据 GitHub 上开源爬虫项目的数量,Python 占比约 63%,JavaScript (Node.js) 约 22%,其他语言如 Ruby、Java 等各占 3%-4%,C/C++/C# 合计约 3%,Go 和 PHP 各约 3% 和 2%。
-
数据基于开源项目,可能不完全代表闭源市场,但提供了一个合理的参考。Python和JS两项技术展现了爬虫领域的强大统治力,几乎覆盖了市面上大部分爬虫需求。剩下的几种语言编写的爬虫的应用领域狭隘,但是仍然占据了位置,而今天文末讨论的重点就是Go语言。
各语言爬虫的特点
-
Python:因其易学性、丰富的库(如 Beautiful Soup、Scrapy)和强大的社区支持,被广泛用于爬虫开发。
-
JavaScript (Node.js):特别适合处理动态网页和实时数据提取,Node.js 运行时使其在服务器端爬虫中表现优异。
-
Ruby:以其简单语法和云开发优势著称,常用库如 Nokogiri 适合处理 HTML 解析。
-
Java:在企业级项目中常见,工具如 JSoup 支持 HTML/XML 解析,适合大规模爬虫。
-
C/C++/C#:性能高,但复杂性较高,适合特定高性能需求,数据中这三者被合并统计。
-
Go:新兴语言,性能优异,适合并发处理,逐渐在爬虫领域获得关注。
-
PHP:主要用于网页开发,爬虫支持有限,但仍有一些库如 Simple HTML DOM Parser 可用于简单任务。
市场占比估算
市场占比的估算主要基于 HasData - The Best Programming Languages for Web Scraping 提供的数据,该数据通过统计 GitHub 上开源爬虫项目的数量得出。具体数字如下:
语言 | GitHub 项目数量(千) | 占比(约) |
---|---|---|
Python | 76.1 | 63% |
JavaScript (Node.js) | 27 | 22% |
Ruby | 4.3 | 4% |
Java | 3.7 | 3% |
C/C++/C# (合计) | 3.4 | 3% |
Go | 3.3 | 3% |
PHP | 2.7 | 2% |
总计约 120.5k 项目,百分比计算基于此总和。需要注意的是,C/C++/C# 在数据中被合并,具体每个语言的单独占比未提供,这反映出这三者在开源爬虫项目中的使用相对较少,难以单独统计。
数据来源和局限性
上述占比数据来源于 GitHub 上开源爬虫项目的数量统计,反映了开源社区的使用偏好。然而,这可能不完全代表闭源或商业爬虫项目的市场分布。例如,企业内部开发的爬虫可能更倾向于 Java 或 C++,而这些项目通常不公开在 GitHub 上;小众的Lua脚本语言也可以进行简单的数据采集,但是大家更倾向于使用Python,因为更快更便捷,这部分也不会被Github统计收录。
因此,数据可能低估了某些语言在特定领域的使用,例如:在气象和地理领域的Fortran语言简直横扫千军,而在工控领域以及游戏开发领域的C#语言深入人心,份额不多的MATLAB语言在模拟仿真和流体力学模拟是一把好手。
在我调研的过程中,还参考了其他技术博客,如 Scraping Dog - 6 Best Programming Languages for Web Scraping in 2024 和 ZenRows - 7 Best Programming Languages for Web Scraping。这些文章虽然未提供具体市场份额,但一致指出 Python 和 JavaScript (Node.js) 是最受欢迎的选择,Python 因其易用性和库支持而领先,有的文章忽略了Go语言爬虫,有的文章忽略了R语言爬虫。
例如,ZenRows提到了一项针对 374 名经验丰富的爬虫开发者的调查,强调 Python 和 Node.js 的偏好,这与 GitHub 数据趋势一致。此外,Stack Overflow Developer Survey 显示 JavaScript 是最常用的编程语言,这也支持了 Node.js 在爬虫中的高占比(Crawlee社区也佐证了这一点)。
Go语言爬虫的必要
我个人更喜欢用 Python 和JavaScript进行网络爬虫,因为在 Youtube 、Oxylabs和Github 等网站上都有更多这方面的教程和资源,但 Go 非常适合大规模、高性能的项目。除非是大型企业,否则我几乎看不到有人使用 Go 代替 Python。
Python在爬虫领域做出了卓越贡献,开发了各种易用的第三方库。为了解决GIL(Global Interpreter Lock,全局解释器锁)这个问题,有的朋友换掉了CPython,改用pypy或Ironpy;有的朋友使用Multiprocessing、threading和asyncio/await,只为提高爬虫性能。为了突破反爬和机器人风控,甚至把Deep Learning的识别技术都拿来破解验证码了。更有甚者开发Scrapy框架和分布式架构,就是为了应对大规模爬虫技术的需求。
但在资源和设备受限的情况下,如何完成大规模爬虫抓取任务?
Go VS Python
Go语言爬虫将呈现出前所未有的优势!下面我将列表对比二者。
对比维度 | Python | Go |
内存占用 | ❌动态类型和GC机制导致内存占用较高, 大规模数据(如亿级) 处理时性能下降明显 | ✅ 编译型语言+高效GC机制, 内存回收更主动, 适合处理海量数据, 内存泄漏风险低 |
并发能力 | ⚡依赖 asyncio 协程或多 进程(受GIL限制), IO密集型任务效率有限 | ✅原生并发无GIL, 支持goroutine和channel, 适合CPU/IO密集型任务 |
执行效率 | ⏳解释型语言,动态语言 执行速度较慢, 大规模任务时解释器开销显著 | ⚡编译型语言,静态语言, 编译为机器码,执行速度快, 尤其适合需要低延迟的实时爬虫场景。 |
适用场景 | ✅中小规模爬虫、 快速开发、数据清洗 (Scrapy/Requests+BS4主导) 🛠️ 依赖分布式框架 (如Scrapy-Redis) 扩展大规模任务。 | ✅超大规模爬虫 (如日亿级请求)、 高稳定性需求,资源受限 🛠️ (如企业级长期运行)。 原生支持分布式部署, 代码维护性高。 |
社区生态 | 🌍生态丰富: Scrapy、 BeautifulSoup、 Selenium等成熟库, 开发者资源充足, 教程和攻略众多 | 📦标准库强大(如 net/http), 但第三方库较少(如Colly), 社区开发者和教程也有限 集成工具链需自行开发。 |
开发体验 | 🚀语法简洁,对初学者友好, 调试工具完善, 适合中小企业的任务交付 | 📐强类型+严格语法, 对初学者有门槛,编译期错误检查, 适合团队协作和长期维护 |
Go语言高性能爬虫开发
1.Colly
Colly 是一个简单而又强大的 Go 爬虫框架,其使用起来非常方便。在 Colly 中,我们可以通过注册回调函数来处理页面中的数据,同时还可以使用 CSS 选择器进行页面元素的定位。Colly 还支持异步请求、代理、Cookie 管理等功能,是一个非常实用的爬虫框架。开源项目共同开发。
2.Pholcus
Pholcus(幽灵蛛)是一款纯 Go 语言编写的支持分布式的高并发爬虫软件,仅用于编程学习与研究。
它支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批量任务并发、输出方式丰富(mysql/mongodb/kafka/csv/excel等);另外它还支持横纵向两种抓取模式,支持模拟登录和任务暂停、取消等一系列高级功能。开发者来自中国。
3.Go_Spider
一个很棒的 Go 并发爬虫框架。爬虫灵活且模块化。可以轻松扩展为个性化爬虫,也可以只使用默认的爬虫组件。开发者来自中国。
4.今日热榜(TopList)
今日热榜,一个获取各大热门网站热门头条的聚合网站,使用Go语言编写,多协程异步快速抓取信息。开发团队来自中国,我个人觉得这个团队很棒。
Go语言爬虫求职
我在这贴一张爬虫技术群招聘的消息,职级:高级爬虫工程师(分布式框架方向)P8
图中有句话:熟练使用Go语言者优先。各位学爬虫工程师,问问自己,能符合上述多少条件?
一旦采取的网站变多,就必须靠队列才能扛住。
一旦数据量写入太大,就得靠硬件升级+数据库才能扛得住。
一旦网站的风控检测和反爬手段变更,还得读取Log定位,然后继续技术攻关。
大规模爬虫还必须维护各种各样的资源,IP池,网站池等,这又涉及到爬虫集群管理技术;
十年前,也就是2016年,selenium风光一时,自动化和无头浏览器(Headless Browser)也曾是爬虫技术的主流。后来动态加载(AJAX)和反爬风控技术出现,这类技术迅速衰败没落,取而代之是磅礴的JavaScrip逆向分析技术。
安卓和苹果逆向的技术开始兴起,又有多少爬虫工程师的需求?
现在AI时代到来了,浏览器插件和脚本横行,自动反混淆和自动定位参数的技术已经出现,这次又有多少技术更新迭代?
我不是鼓吹Go爬虫天下无敌,大企业都必须用Go爬虫,每个爬虫同行都得学Go爬虫,萌新入门都得先学Go爬虫,我从来不会这样鼓吹。学什么样的爬虫得结合市场需求,自身定位以及最新的技术发展状况。因为我知道,有破亿级别数据采集需求的企业是极少数,Go爬虫的使用场景相当有限。普通的中小企业,怎么会有破亿级别的数据需求?
举个例子:我亲自接单开发的,一家位于深圳的水果店,就是抓一下当季畅销水果在广东不同市区的定价,有了定价可以找最低的供货商,这样利润能大一点。他的水果店总共不到20种水果,就算每种水果有100种不同定价,足够多了吧?每天也才2000条数数据体量,一个excel表格就能装下。一个水果店,我何必用Go语言开发爬虫,直接用现有的代码,改一改,马上就能用了。
哪些企业会需要Go语言?
BaiDu,Google,Yandex,NAVER等,这类做Search Engine技术的公司,每天是肯定有破亿级别的数据采集需求。举个例子:搜索引擎的用户和访问次数均已破亿!而搜索引擎本质就是爬虫。
Bytedance,Alibaba,Tencent等,这些数据类大厂是有可能需要的。举个例子:淘宝作为电商的先驱,需要看到其他电商平台,同一商品的价格,而且需要查看其他电商平台有哪些新品类是自己不具备的。几乎每一秒都是数以万计的信息采集,每天破亿轻而易举。
Ctrip,途牛,铁路12306等,这类OTA软件,在特定节假日,爬虫需求是扩大的。举个例子:春运期间和国庆旅游季,这类软件将承接用户海量访问次数。
其他的企业,不会有那么多需求,一般几个或十几个逆向安全工程师就能搞定了。实在是到了破亿级别的数据需求量,自然会想办法用Go语言重构爬虫框架,提高性能,节约内存和IO资源。否则就只能掏钱继续雇人,升级硬件设备。
总结:Go在特定的领域和需求下,比Python更胜任爬虫需求。大部分情况下,学好Python和JS逆向就够用了,如果是为了精进技术和进一步升职加薪,那就只能朝更深入的方向钻研。
参考文献
-
Scraping Dog - 6 Best Programming Languages for Web Scraping in 2024
-
Oxylabs - Best Programming Languages for Effective Web Scraping
-
Stack Overflow Developer Survey 2024 - Most Popular Technologies
-
感谢一位不愿意透露姓名的高级爬虫工程师,提供的大规模爬虫技术实现顾问,让爬虫尖端领域以Blog的形式,来到大众眼前。再次感激。
-
本文的数据来源都是公开的,合法的,不涉及商业竞争,利益分配问题。用到的任何材料,都有出处。