爬虫是什么

先用一句话说清楚:

爬虫就是一个自动帮你打开网页、读取数据、提取有用信息、保存起来的程序。

它做的事情,本质上和人打开浏览器看网页差不多,只不过人是用眼睛看、手动复制;爬虫是用代码访问网页、自动提取。


1. 先用一个生活化比喻理解

你打开招聘网站找职位,大概会这样:

打开网站
↓
搜索关键词
↓
看到职位列表
↓
点开某个职位详情
↓
复制职位名称、公司、薪资、地点、描述
↓
保存到表格里

爬虫做的事情就是:

用代码打开网站
↓
用代码搜索或翻页
↓
用代码读取职位列表
↓
用代码打开详情页
↓
用代码提取职位字段
↓
用代码保存成 JSON、Excel 或入库

所以爬虫不是神秘技术,它的核心就是:

把人工浏览网页、复制数据的过程自动化。

项目里,前程无忧、猎聘、鱼泡这些脚本,本质上都是围绕“自动打开职位列表、抓职位详情、保存并入库”这条链路在做增强。

2. 浏览器打开网页时发生了什么?

要理解爬虫,必须先理解浏览器。

当你在浏览器输入一个网址,比如:

https://example.com/jobs

浏览器背后大概做了这些事:

  1. 浏览器向服务器发请求
  2. 服务器返回内容
  3. 浏览器解析内容
  4. 浏览器把页面画出来
  5. 页面中的 JavaScript 可能继续请求更多数据
  6. 最终你看到完整页面

可以画成这样:

你 / 浏览器
   ↓ 请求 Request
网站服务器
   ↓ 响应 Response
你 / 浏览器
   ↓ 解析 HTML、CSS、JS、JSON
最终页面

3. 网页里到底有什么?

一个网页通常不是一个单独的东西,而是由几类内容组合出来的。

3.1 HTML:网页骨架

HTML 决定页面上有什么内容。

比如:

<h1>数据分析师</h1>
<p>薪资:15k-25k</p>
<p>地点:上海</p>

可以把 HTML 理解成网页的“骨架”。

3.2 CSS:网页样式

CSS 决定页面长什么样。

比如字体大小、颜色、布局、按钮样式。

爬虫一般不关心 CSS,因为我们要的是数据,不是页面好不好看。

3.3 JavaScript:网页动作

JavaScript 决定页面如何动起来。

比如:

点击下一页
下拉加载更多
选择城市
选择学历
弹出详情
异步请求职位列表

很多现代网站不是一开始就把所有职位写在 HTML 里,而是先加载一个空页面,再由 JavaScript 请求职位数据。

这也是为什么有些网页你用简单代码抓不到内容。

3.4 JSON:接口返回的数据

很多职位网站真正的数据,其实藏在接口返回的 JSON 里。

例如:

{
  "jobTitle": "数据分析师",
  "company": "某科技公司",
  "salary": "15k-25k",
  "city": "上海"
}

JSON 对爬虫非常友好,因为它本身就是结构化数据。

猎聘爬虫就大量利用了这一点:列表页不是完全从页面文字里硬抠,而是监听猎聘返回的职位接口 JSON,再用职位详情页补充描述、地址、标签等字段。

4. 爬虫和浏览器的区别

浏览器是给人看的。

爬虫是给程序用的。

对比项 浏览器 爬虫
使用者 程序
目的 展示网页 提取数据
操作方式 点击、滚动、复制 请求、解析、保存
结果 页面 JSON、表格、数据库
关注点 好不好看 数据准不准、全不全、稳不稳

所以爬虫不一定要“看到”完整页面。

如果能直接拿到接口 JSON,就不需要真的渲染网页。

但如果数据必须点击、滚动、登录、等待 JS 加载后才出现,就可能需要模拟浏览器。

5. 最小爬虫模型

所有爬虫,无论简单还是复杂,本质都可以拆成五步:

1. 请求
2. 获取
3. 解析
4. 提取
5. 保存

展开就是:

给一个 URL
↓
发送请求
↓
拿到网页 HTML 或接口 JSON
↓
从里面找出目标数据
↓
保存到文件或数据库

比如抓职位,最小模型是:

职位列表页 URL
↓
请求列表页
↓
提取职位链接
↓
请求职位详情页
↓
提取职位名称、公司、薪资、地点、描述
↓
保存

参考的两个项目也是这个模型,只是复杂很多。

比如通用招聘采集系统在“获取”之后,还增加了 HTML 清洗、Markdown 转换、OCR、二维码识别、模型抽取、质控、上传等环节。

6. 爬虫为什么能抓到数据?

因为网页数据最终要展示给用户。

只要浏览器能看到数据,理论上这些数据就一定以某种形式到达了你的电脑:

可能是:

HTML 里直接有
JSON 接口里有
JavaScript 渲染后才出现
图片里有
二维码里有
登录后接口里有

爬虫的任务就是找到它在哪里。

这句话很重要:

爬虫不是“创造数据”,而是找到网页已经返回给浏览器的数据,然后提取出来。

7. 为什么有些网页好抓,有些网页难抓?

因为数据出现的位置不同。

第一种:HTML 里直接有数据

这种最好抓。

<div class="job-title">产品经理</div>
<div class="salary">20k-30k</div>

代码请求 HTML 后,直接解析就行。

这类适合用:

requests + BeautifulSoup / lxml

第二种:HTML 里没有数据,接口里有数据

页面刚打开时 HTML 可能是空壳,真正职位列表来自接口。

这种更适合找接口,直接拿 JSON。

适合用:

requests 请求接口
或者 Playwright 监听接口响应

猎聘列表页就是比较典型的“接口数据更有价值”的场景。

第三种:必须操作页面才有数据

比如:

点击城市
选择经验
选择公司规模
点击加载更多
滚动到底部

这时候简单 requests 不够,需要模拟浏览器行为。

适合用:

Playwright / Selenium

第四种:数据在图片或二维码里

比如招聘公告是一张海报,里面写着岗位和联系方式。

普通 HTML 解析抓不到文字,需要:

下载图片
OCR 识别文字
二维码识别
再参与结构化抽取

参考项目中的通用采集结构化项目就包含 OCR、二维码、图片上传和图片去重这些能力。

8. 这就引出了“四重采集通道”

通道一:静态 HTML 采集

适合简单网页。

代码直接请求网页 HTML
↓
从 HTML 中解析数据

特点:

简单、快、成本低
但遇到动态网页容易抓不到数据

通道二:动态页面采集

适合需要点击、滚动、等待加载的网站。

用 Playwright 打开浏览器
↓
像真人一样点击、滚动、翻页
↓
从页面里提取数据

特点:

更接近真实用户
能处理复杂页面
但速度慢、资源消耗大、容易遇到反爬

通道三:API 直连采集

适合已经找到数据接口的网站。

直接请求接口
↓
拿到 JSON
↓
解析字段

特点:

最快、最干净、最稳定
但需要找到接口并理解参数

通道四:浏览器响应监听采集

适合接口不好直接复刻,但页面会自己请求接口的情况。

用 Playwright 正常打开网页
↓
监听浏览器收到的接口响应
↓
把 JSON 抓出来

特点:

不用完全破解接口参数
又能拿到接口级数据
非常适合复杂动态网站

这也是很多真实项目里非常实用的方式。

猎聘项目就是这种思路:通过页面真实操作触发接口,再监听接口拿职位列表,之后再打开详情页补字段。

9. 爬虫为什么会失败?

常见原因有这些。

9.1 页面结构变了

原来职位标题是:

<div class="job-title">

后来网站改成:

<span class="position-name">

你的解析规则就失效了。

9.2 数据不是写在 HTML 里

你请求网页源码,发现里面没有职位数据。

原因可能是职位数据由 JavaScript 后加载。

9.3 需要登录或 Cookie

有些数据必须登录后才能看。

浏览器有 Cookie,代码没有 Cookie,就抓不到。

9.4 被反爬识别

网站发现你访问太快、太规律、IP 异常、行为不像真人,就可能返回:

验证码
405
403
安全验证
空数据
跳登录

渠道专项爬虫里就有代理池、随机休眠、资源拦截、验证页识别、过期清洗等处理,这些都是为了解决长期稳定运行的问题。

9.5 抓到了,但数据不干净

比如:

广告
页脚
免责声明
推荐职位
无关链接
图片文字
重复内容
过期职位

所以真实系统还要做清洗、去重、质控和入库。


10. 需要记住的核心模型

先不用急着写代码,先记住这个模型:

网页数据在哪里?
        ↓
HTML 里?
接口 JSON 里?
JavaScript 渲染后?
图片/二维码里?
        ↓
选择合适的采集方式
        ↓
提取字段
        ↓
清洗去重
        ↓
保存或入库

再压缩成一句话:

爬虫的本质,是用程序模拟“获取网页数据”的过程,并把网页中的非结构化或半结构化信息,转换成我们能使用的结构化数据。

爬虫 = 自动化获取网页数据的程序

网页 = HTML + CSS + JavaScript + 接口数据 + 图片等资源

浏览器 = 帮人请求、解析、渲染网页的工具

爬虫 = 帮程序请求、解析、提取、保存数据的工具

简单网页 → requests 抓 HTML

动态网页 → Playwright 模拟浏览器

接口数据 → 直接抓 JSON

复杂接口 → Playwright 监听 response

图片数据 → OCR / 二维码识别


组内导航:⬅️ 00-爬虫课程六讲 | 🏠 00-爬虫课程六讲 | ➡️ 四重采集通道