目录
1 什么是爬虫抓包?
2 抓包原理
3 环境搭建
4 抓包实战步骤(附代码)
4.1 打开开发者工具
4.3 复制请求信息
5 完整代码示例
6 核心知识点总结
6.1 requests库常用方法
6.2 响应状态码含义
7 常见问题及解决
8 总结
9 进阶学习方向
1 什么是爬虫抓包?
抓包 = 捕获数据包。在爬虫领域,指找到数据真实来源的接口地址。
很多初学者以为爬虫就是直接请求网页URL,但实际上,你看到的页面数据往往是通过Ajax异步加载的JSON,并不在HTML里。
抓包的核心目的:找到返回真实数据的API接口。
2 抓包原理
抓包就像在快递中转站盯着包裹分拣员——你打开网页时,浏览器会向网站服务器发送一个“取件请求”,服务器则像仓库管理员一样把对应的“数据包裹”返回来。正常情况下,你只能看到最终送到家门口的完整包裹(即渲染好的页面),却不知道包裹中途经过了哪些分拣口、贴了什么标签。而抓包,就是偷偷溜进中转站的监控室,按下暂停键,看着每一个包裹从哪个通道进来、贴着什么样的快递单(请求头)、装着什么东西(返回的JSON数据)、又要被送往哪个货架。通过F12开发者工具的Network面板,你就能像调取监控录像一样,把浏览器和服务器之间的每一次“快递交接”都记录下来,从中找到那个藏着真实数据的“核心包裹”——往往不是最显眼的网页HTML,而是那些悄悄传递的异步接口(XHR请求)。拿到这个包裹的“取件码”(URL和Headers),你就可以用Python的requests库模仿浏览器的身份,直接去仓库把同样的数据包裹取回来,而不必再等整个网页慢慢组装。
3 环境搭建
先安装好需要用到的库,再验证一下是否安装完整
# Windows
pip install requests
# Mac/Linux
pip3 install requests
# 如果下载慢,使用国内镜像
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
#验证安装
import requests
print(requests.__version__) # 输出版本号,如 2.31.0
4 抓包实战步骤(附代码)
4.1 打开开发者工具
在浏览器中打开目标网页(如:前程无忧),按 F12 打开开发者工具,点击 Network(网络) 标签,点击 Fetch/XHR 筛选异步请求,按 Ctrl+R 刷新页面
4.2 找到数据接口
观察请求列表,找特征:返回类型是什么(常见 json),名称包含 api、search、list、card等信息,点击Preview能看到数据
4.3 复制请求信息
点击找到的请求 → 查看 Headers 面板:
# 需要复制的三要素 1. Request URL: https://cupid.51job.com/open/noauth/hr/card/15122003?… 2. Request Method: GET 3. Request Headers: 复制关键字段(User-Agent、Referer、Cookie、sign)
5 完整代码示例
# 步骤1:导入requests库
import requests
# 步骤2:构造请求头(模拟浏览器)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'https://www.51job.com/',
'Cookie': '你的Cookie值' # 从浏览器复制
}
# 步骤3:写入目标URL
url = "https://cupid.51job.com/open/noauth/hr/card/15122003?api_key=51job×tamp=xxx"
# 步骤4:发送GET请求 (请求方法从网页查看)
response = requests.get(url=url, headers=headers)
print(response) # 在控制台看到200表示成功
# 步骤5:获取响应内容
json_data = response.json() # 直接转JSON,成功就会返回数据
print(json_data) #打印出来需要的数据,方便后续处理
6 核心知识点总结
6.1 requests库常用方法
| requests.get(url, headers) | 发送GET请求 | response = requests.get(url, headers=headers) |
| requests.post(url, data, headers) | 发送POST请求 | response = requests.post(url, data=data) |
| response.status_code | 获取状态码 | 200成功,404未找到,403禁止访问 |
| response.text | 获取文本内容 | HTML或JSON字符串 |
| response.json() | 获取JSON(转字典) | data = response.json() |
| response.content | 获取二进制内容 | 图片、文件等 |
6.2 响应状态码含义
| 200 | 成功 | 正常解析数据 |
| 301/302 | 重定向 | 跟随新地址(requests默认会自动跟随,可设置allow_redirects=False禁用) |
| 400 | 错误访问 | 检查请求参数格式是否正确,Content-Type是否匹配,必传参数是否完整 |
| 401 | 未授权访问 | 检查Cookie是否过期,登录态是否有效,需要重新获取token或重新登录 |
| 403 | 禁止访问 | 检查headers和Cookie,User-Agent是否被识别,Referer是否正确,IP可能被封禁需更换代理 |
| 404 | 页面未找到 | 检查URL是否正确,资源ID是否有效,接口路径是否有变动 |
| 405 | 方法不允许 | 检查请求方法(GET/POST/PUT)是否与接口要求一致 |
| 408 | 请求超时 | 增加超时时间timeout参数,检查网络连接,或使用重试机制 |
| 413 | 请求实体过大 | 减少单次请求的数据量,使用分片上传或压缩数据 |
| 429 | 请求过多(限流) | 增加延时间隔,使用代理IP轮换,降低请求频率,遵守Robots协议 |
| 500 | 服务器内部错误 | 稍后重试,添加重试机制(如retry装饰器),检查是否触发了服务器Bug |
| 502 | 网关错误 | 服务器作为网关收到无效响应,稍后重试或切换节点 |
| 503 | 服务不可用 | 服务器过载或维护,增加重试间隔(指数退避),在低峰期访问 |
| 504 | 网关超时 | 上游服务器响应超时,适当增加超时时间,或分批次请求 |
7 常见问题及解决
1.运行代码时报错 ModuleNotFoundError: No module named 'requests',怎么办?
答:这是因为你的Python环境没有安装requests库。打开命令行或终端,执行 pip install requests 安装即可。如果下载速度慢,可以用国内镜像加速:pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple。
2. 请求返回状态码403,是什么原因?
答:403表示服务器拒绝访问,通常是网站识别出你不是真实浏览器。解决方法是在请求头中加入 User-Agent 模拟浏览器标识,如果还不行,需要把浏览器里的 Cookie 也复制到headers中。简单说就是让服务器觉得“你就是一个正常访问的真人”。
3. 报错 JSONDecodeError,说无法解析JSON,怎么解决?
答:这个错误说明服务器返回的不是JSON格式数据,可能是HTML页面、错误提示或者空内容。先用 print(response.text) 打印出原始返回内容,看看实际返回了什么。常见原因有:请求URL不对、需要登录、IP被限制等。
4. 打开开发者工具后页面一直卡住,显示“已在调试程序中暂停”,怎么处理?
答:这是网站的反爬机制,通过 debugger; 语句让页面在调试模式下卡死。解决方法:按F1打开开发者工具设置,搜索“debugger”,找到“Don't stop on debugger statements”选项并勾选它,之后就不会再被卡住了。
5. 在Network面板搜索“数据分析师”,结果显示“没有与搜索查询匹配的内容”,为什么找不到?
答:你把筛选框的用途搞错了。Network面板顶部的筛选框是用来过滤“请求名称”的,不是搜索页面文字。数据接口的请求名称一般叫 search、list、api 等,不会叫“数据分析师”。正确操作是:删除筛选框里的关键词,点击 Fetch/XHR 按钮,然后刷新页面,就能看到所有异步请求了。
8 总结
爬虫抓包核心三步:
1. 抓包找接口 → F12 → Network → Fetch/XHR → 找数据请求
2. 复制关键信息 → URL + Headers + Cookie
3. Python模拟请求 → requests.get() → 解析 → 保存
记住这个流程,任何网站的数据采集都适用!
9 进阶学习方向
| 动态JS逆向 | 破解加密参数 | PyExecJS、Node.js、AST |
| 异步爬虫 | 提高采集效率 | aiohttp、asyncio |
| 分布式爬虫 | 大规模采集 | Scrapy-Redis |
| 浏览器自动化 | 绕过复杂反爬 | Selenium、Playwright |
| 验证码识别 | 自动打码 | Tesseract、打码平台 |
| 代理IP池 | 突破IP封禁 | 自建代理池、付费代理 |




