名词解释教学工作区 · 课程 0021 · 形态 单概念 · 约 6 分钟 · 前置:0013 · 前端 / 后端 / 接口 · 相关:0020 · 抓包 · 2026-10-01

爬虫:让程序替你把页面翻完

你能做到:拿到一个「想把某站的数据收下来」的需求,先按三步判断 —— 有没有现成的对外接口、数据在不在返回的 HTML 里、该以多快的速度问; 再决定是自己写一段循环,还是用现成的工具。

1 | 定义

爬虫(web crawler,也叫 web scraper,网页抓取程序): 一段照着你给的起始地址去请求网页的程序 —— 它把取回来的页面解析 parse成一条条字段, 同时从页面里挑出指向别处的链接,把新链接排进队列 queue接着请求,直到没有新地址为止。 像派一个不累的小助手替你一页页翻过去:你把总目录交给他,他抄下要的那几栏, 顺手记下还有哪些门牌没去过,回头接着翻 —— 你不必亲手点开每一页,但得先告诉他「哪些算要的」。

2 | 它解决什么麻烦

这类需求的共同点是:重复、量大,而且过一阵还得重来一次。

四条指向同一件事:要的是页面里那几栏数据,而页面本身是为浏览准备的。 爬虫做的,就是把这个「取数」的过程自动跑起来。

3 | 它怎么解决

一个循环,直到队列空:

起始地址 seed 列表页、站点地图,或一批已知链接 -> 请求 request 按地址把页面取回来 -> 解析 parse 挑出字段,顺手收集新链接 -> 去重 dedupe 见过的地址不再抓第二遍 -> 队列 queue 新链接排进去,回到请求那一步

4 | 用它的代价

5 | 真实使用场景

场景一:盯价格与库存,按时跑一遍。

# 把取数写成一条能反复调用的命令
python fetch_prices.py --out prices.csv
# 交给系统的定时计划按点跑(crontab 写法:分 时 日 月 星期)
# 0 8 * * * python /srv/price/fetch_prices.py --out /srv/price/prices.csv

存一份历史价格,变化趋势就能自己算;出问题时对着原始返回查,而不是对着截图猜。这种过一阵就跑一次的活,常放在一台常年开着的树莓派上。

场景二:把某个站的内容搬进自己的知识库。

# 先读站点自己给的地址清单,省得自己满站找链接
curl -s https://example.com/sitemap.xml
# 再逐页取正文、挑出标题与正文,存成 Markdown 放进笔记目录
python grab_docs.py --sitemap https://example.com/sitemap.xml --out ./notes

文档站、博客这类结构规整的站点,照站点地图翻一遍就能搬全;正文用选择器挑出来,导航与页脚顺手丢掉。

场景三:给没有对外接口的老系统取数,或者批量下载公开数据集。

老系统只肯把数据画成一张网页表格,那就按表格结构把列抠出来 —— 这类系统往往最经不起折腾, 限流要放得更慢、失败要留记录。公开数据集若只提供一页页的下载链接,也一样照清单批量取下来。

6 | 和相近的东西怎么分

先问一句:这份数据,有没有人愿意规规矩矩地给你?有,就别去翻页面。 再问一句:你要的是「把数据拿下来」,还是「看清线路上发生了什么」?

名称它是什么和爬虫什么关系
官方 API(application programming interface,应用编程接口) 站点为程序准备的取数方式,格式有约定、字段有说明,拿到的是 JSON 这类结构化结果 同一件事的省事做法:有它就先用它,不必去解析页面结构,爬虫常是「没有接口时的替补」
抓包 把流经网卡的数据原样抄一份下来,事后逐条回看 方向相反:它只把线路上跑的东西看清楚,不替你翻页,也不把内容整理成数据
站点地图 sitemap 站点自己列出的地址清单,一条条写给程序看;同类还有订阅源 RSS,按条目给出最近更新的内容 一份官方目录:照它翻能少找很多链接,但只有站点愿意提供时才有
搜索引擎 替你把全网页面抓下来、建好索引、你只管查的一整套服务 分工反过来:它替你抓、你来问;要「我自己这份、按我的字段筛」,它给不了
RPA(robotic process automation,机器人流程自动化) 模仿人在界面上的点击与填表,操作的是屏幕控件,不是网页内容 取数的另一条路:页面连结构都不好解析、只能靠点界面时用它;代价是界面一改就全废

一句话分工:有接口就用接口,有目录就照目录,都没有才自己翻页面; 至于线路上到底流过什么,那是抓包的领域。

7 | 常见误解

8 | 练习

三题自测,每题只有一个正确选项;选完立刻看到解释。

1. 想把一个站点的数据收下来,最该先确认的是哪件事?

对。先看有没有现成的取数方式 —— 有就直接拿,不必去猜页面结构;等确认没有,才轮到解析页面的那套工具上场。

2. 同一个地址请求回来,HTML 里字段全是空的,可用浏览器打开明明看得到。该让哪一样上场?

对。原始返回里没有数据,说明那段内容是在浏览器里拼出来的:要么找到它背后的取数方式,要么让无头浏览器把页面跑起来再取。

3. 下面哪一样,是站点主动交给你、免得你自己满站找链接的?

对。站点地图与订阅源都是站点自己给出的清单,照着它翻能少走很多弯路;选择器管挑字段,抓包看的是线路,无头浏览器是把页面跑起来的工具。