爬虫的一些经验
引言
我从初中就开始搞爬虫了。
那时候B站上就已经充斥着各种售卖爬虫课程的视频。回看这十几年,技术生态变了又变,但爬虫的本质逻辑其实从未改变。今天不谈虚的,结合我这些年的实战经验,跟大伙唠唠爬虫的底层逻辑、技术选型,以及那些真正折磨人的“终极Boss”。
一、 爬虫的两大终极流派:性能与上限的博弈
在真正动手之前,我们要明白,天下爬虫方案万变不离其宗,本质上就两类:
1. HttpClient 直接发起 HTTP 请求
- 代表工具:Axios、OkHttp、Python Requests、Jsoup 等。
- 特点:性能极高,速度极快。直接请求 API 或 HTML 源码,省去了浏览器渲染的巨大开销。
- 痛点:上限很低。在如今层出不穷的反爬机制(混淆 JS、动态 Token、设备指纹)面前,这种方法极易碰壁。
2. 控制浏览器( headless browser )
- 代表工具:以前流行 Selenium(底层是 WebDriver),现在则是 Playwright 的天下。
- 特点:上限极高。因为它是真正的浏览器在跑,能完美执行 JS,应对各种复杂的页面渲染。
- 痛点:一个字,慢。资源消耗极大。
老手避坑建议: 以前大家言必称 Selenium,但现在我强烈推荐 Playwright。它的 API 设计比 Selenium 强大得多,开箱即用的 UX(用户体验)更是直接将其甩开几个身位。
🔥 2026 补充:针对指纹检测的“降维打击”武器
说到控制浏览器,最近开源社区出了个神兵利器:CloakBrowser。
以前我们为了防检测,要在 Playwright 里打各种 stealth 补丁,极其痛苦且治标不治本。而 CloakBrowser 直接从 C++ 底层 patch 了 Chromium 的源码,号称是“能通过所有 Bot 检测的潜行版 Chromium(Stealth Chromium that passes every bot detection test)”。
最爽的是,它API 完全兼容 Playwright。这意味着你不需要重写任何业务代码,直接换个内核就能原地起飞,这简直是现代爬虫项目的史诗级福利。
二、 编程语言与解析工具:别被“Python 唯一论”洗脑了
理论上,任何能发请求、能解析字符串的语言都能写爬虫。但很多人有个误区,觉得写爬虫只能用 Python。
说实话,我觉得用 Python 写爬虫并不好用——它的 Typing(类型系统)太垃圾了。 在处理大规模、高复杂度的爬虫项目时,没有强类型约束简直是灾难。
- 我的技术路线演进:
- 早期:
Kotlin+JSoup(解析 HTML 极其丝滑,得益于 JVM 强大的生态和 Kotlin 优秀的语法糖)。 - 现在:
TypeScript(配合 Playwright,完美契合现代前端生态)。
- 早期:
关于数据解析(HTML 查询):
我们要榨取的资源无非是:HTML、JS、图片、JSON。对于 HTML 元素的定位,主流就是两种:CSS 选择器和 XPath。
- XPath:它是 XML 时代留下的屠龙宝刀,功能极其强大(支持各种复杂的逻辑运算和节点轴定位)。我以前非常喜欢它。
- CSS 选择器:现在我的新宠。体感上和 XPath 差不多,但它的支持更广泛,且书写更符合现代前端的直觉。
- 正则表达式:这是 100000% 必须掌握的看家本领! 当你面对格式破损(Malformed)的数据或者非结构化的文本时,任何选择器都白搭,只有正则能救你于水火。
三、 爬虫真正的分水岭:难的不是“解析”,而是“获取”
如果你觉得写个 CSS 选择器把数据提取出来就叫会写爬虫了,那只能说明你才刚刚入门。
爬虫最难的永远不是解析资源,而是获取资源。
现在的互联网不再是当年那个不设防的后花园了,为了拿到数据,你得跟反爬工程师们斗智斗勇,而你面临的关卡包括但不限于:
- 数据加密/签名:核心数据不放在 HTML 里,而是通过 Ajax 加载,且请求参数带了各种魔改的 MD5/AES/RSA 签名。这时候你必须去逆向 JS 代码,在成万行的混淆代码里断点调试。
- 身份认证与会话:需要复杂的登录流程、自动获取并维护 Token/Cookie,甚至要绕过各种行为验证码。
- 大厂的盾(如 Cloudflare):5秒盾、JS 挑战、浏览器指纹检测(Canvas 指纹、WebGl 指纹),直接把你卡在门外。
- 设备检测:很多网站会严查是否是 Mobile 设备。你得学会完美模拟 Viewport、User-Agent 以及各种 Navigator 属性。
能优雅地解决这些问题,才算是一个合格的爬虫工程师。
四、 爬虫的生存哲学:高并发?单线程+阻塞才是 YYDS
年轻的时候,大家都心高气傲,喜欢学 Scrapy(那个时候流行的爬虫框架,重得很,号称爬虫界的 Spring Boot),追求华丽的并发、高吞吐量。
但当你真正去爬那些有价值的、被严密防护的网站时,你会发现:
在严苛的限流(Rate Limit)策略面前,高并发毛都不是。
你刚把并发开到 100,还没来得及高兴,IP 直接就被拉黑了,甚至连累整个 C 段代理。
做爬虫,最需要懂得的艺术是**“苟且”**——你不 sleep 几分钟,就等着进黑名单吧。
因此,在实战中,单线程 + 阻塞(或者是极低频的并发 + 随机延迟)才是真正的 YYDS。温水煮青蛙,顺应对方服务器的呼吸节奏,把每一次请求模拟得像一个真正的、手速极慢的人类用户。走得慢,才能走得远。
结语
写爬虫是一场没有终点的攻防战。从最初的简单获取 HTML 源码,到现在的逆向、模拟、指纹对抗,技术在变,好玩的程度也在变。
希望我的这些碎碎念,能帮你在写下一个 Request 之前,少走哪怕弯路一步。最重要的是:技术虽好,且爬且珍惜(注意法律边界!)。