一、爬虫的本质
一次 HTTP GET,套在一个 while 循环里。
Unix 层面核心只有一条:
curl -sL http://example.com/
爬虫 = 这条命令 + 从响应里抽出链接 + 塞进队列 + 去重,然后循环执行。它本质上就是个 while 循环,循环体是 curl。手搓的最小版本:
while read -r url; do curl -sL "$url" | grep -o 'href="[^"]*"'; done < urls.txt
wget -r 就是别人替你把这个循环、去重、限速、robots 全都封装好的一条命令:
wget -r -l 3 -np http://example.com/
所以层次是:
- 原语:
curl/wget,抓一个 URL - 爬虫:curl + 链接提取 + 队列 + 去重(自己写的循环)
- 框架:Scrapy / Colly / Puppeteer,把调度、并发、反爬工程化
从图论看,它就是在走互联网这张图:URL 是节点,链接是边。区别只在于队列、去重和调度做了多重。边界在合规,不在技术。
二、反爬的本质
这不是「禁止访问」,是成本博弈。 HTTP 对谁都一样,所以反爬只做两件事:
技术上是访问控制 + 流量治理,不是安全防护; 经济上是抬高单位抓取成本,让
爬虫成本 > 数据价值。
具体三关:
- 身份:你自称 Chrome,TLS 握手(JA3/JA4)、HTTP/2 参数顺序、UA 与 JS 环境、Cookie 会话都得对得上,错一处就露馅。
- 节奏:真人会停顿、犹豫、回看;爬虫 100ms 一次、路径固定。不看你是谁,只看像不像人。
- 配额:超频限速,再超封 IP,可疑就弹验证码(真人点一下,脚本卡死);再埋一个肉眼看不见的链接,只有解析 HTML 的程序会点。不问你是谁,只算值不值得服务。
三关都在加钱:伪装指纹、换代理、模拟行为、打码。争的是行为特征的分布,谁让对方边际成本先崩,谁赢。
所以反爬没有「攻克」一说,它是持续的动态平衡,和杀毒软件 vs 病毒是同一类问题。
两句话
- 爬虫 = 图遍历循环。
- 反爬 = 让你比人贵。