2023年最新Ajax爬取技术教程
前言
你一定遇到过这样的场景:兴致勃勃地用 requests 请求一个网页(比如微博、抖音网页版、小红书旧版列表),返回的 HTML 却只有空荡荡的骨架,正文、列表数据像是凭空消失了一样。这种情况多半是因为网站采用了 Ajax(Asynchronous JavaScript and XML) 动态加载内容——服务器并不是一开始就把所有数据塞进 HTML,而是等页面加载完成后,前端再悄悄向后端接口发起请求,拿到 JSON 或 XML 数据后渲染到页面上。
这篇教程就带着你从「开发者工具入门抓包」到「实战微博移动端」,覆盖 2023~2024 主流的 Ajax 分析方法和基础反爬应对技巧。全程没有复杂公式,30 分钟就能上手!
1. 现代 Ajax 请求分析技术
Ajax 的核心思想是「前端异步请求后端接口拿数据」,所以我们的第一步就是找到这个隐藏的接口。所有现代浏览器(Chrome、Edge、Firefox 都可以,推荐 Chrome)自带的「开发者工具」就是我们的最佳助手。
1.1 开发者工具快速开启
不用再回忆繁琐的右键菜单顺序,记住这几个快捷键就够了:
- Windows / Linux:
F12或Ctrl + Shift + I - macOS:
Cmd + Option + I
专业操作流程:
- 先打开目标页面(例如微博移动端个人主页:
https://m.weibo.cn/u/2830678474)。 - 按下快捷键启动开发者工具,切换到顶部的 Network(网络) 面板。
- 按
Ctrl + R(Windows / Linux)或Cmd + R(macOS)强制刷新页面——只有这样才能完整捕获页面加载过程中触发的所有请求,包括静态资源和动态接口。
1.2 快速筛选隐藏的 Ajax 接口
刷新之后,Network 面板会列出密密麻麻的请求(CSS、JS、图片、字体……),直接肉眼寻找接口效率太低。用好下面几个筛选标签,可以瞬间定位目标:
- Fetch/XHR:覆盖 99% 的现代动态接口,包括传统的
XMLHttpRequest和新式的fetch API。 - WS:如果网页内容是通过 WebSocket 双向实时通信获取的(比如聊天消息、直播弹幕),就点这个标签。
- GraphQL:部分新网站(例如新版 GitHub 部分页面、Notion)会用 GraphQL,你可以在筛选栏手动点击「Filter」并勾选「GraphQL」。
筛选完 Fetch/XHR 之后,剩下的请求基本上就是我们想要的动态接口了。
1.3 快速判断接口是否有效
面对一长串接口,怎么快速识别出「正文列表」「用户信息」这类真正的数据接口呢?试试这三个小技巧:
-
看请求方法和 URL 特征
大多数数据接口使用GET(获取数据)或POST(提交复杂参数),URL 中往往会出现/api/、/v2/、/feed/、/list/、/user/等关键词。 -
看响应预览(Preview)
在 Network 面板中点击某个请求,再切换到右侧的 Preview 标签。如果你看到了熟悉的内容,比如博主的微博正文、用户头像 URL,那么恭喜你,目标接口找到了! -
复制 curl 命令辅助调试
如果担心自己漏看请求头,可以直接右键点击有用的请求,选择 Copy → Copy as cURL (bash),这样就能拿到一份和浏览器完全一致的请求模板,后续转成 Python 代码也非常方便。
2. 2023~2024 主流反爬应对基础
找到接口只是第一步,很多网站会设置反爬机制:直接在浏览器里打开接口地址可能一切正常,但用 Python 一请求就返回 403、401 或者空数据。这里给大家几个入门但非常实用的解决方案。
2.1 完整模拟浏览器请求(最常用)
大部分入门级反爬(比如检查 User-Agent、Referer、Cookie 这些请求头)只要把刚才复制出来的 cURL 命令转换成 Python 代码就能轻松搞定。
推荐使用免费工具一键转换:curlconverter.com
转换时需要注意两点:
- 如果请求中存在 Cookie,不要直接把可能很快过期的 Cookie 硬编码到代码里。可以使用
httpx的cookiejar来管理。 - 务必加上
http2=True参数,因为很多新网站已经强制要求 HTTP/2 协议,不开启可能直接 403。
下面是一个通用的完整模拟请求模板,使用支持 HTTP/2 的异步库 httpx,比 requests 快不少:
2.2 应对动态参数的入门方法
如果模拟了完整请求头之后依然失败,那大概率是接口中包含了动态参数,比如每次请求都会变化的 sign、token、_t 等。对于入门级别的动态参数,可以尝试使用 PyExecJS 直接执行页面上的加密 JS 来解决:
- 在开发者工具的 Sources(源代码) 面板中,利用
Ctrl + Shift + F全局搜索参数名(如sign),找到生成该参数的 JavaScript 函数。 - 把这段 JS 函数和相关依赖代码复制出来,注意补全它依赖的其他变量或函数。
- 用 PyExecJS 执行这段 JS,计算出当前请求需要的动态参数。
举个简单的例子,假设生成 token 的函数是 getToken(timestamp):
3. 微博移动端实战(2023 年 12 月亲测有效)
理论讲得差不多了,现在我们就用 微博移动端某公开博主的主页(https://m.weibo.cn/u/2830678474,不涉及个人隐私)来做一个完整的实战演练。
3.1 抓包找到目标接口
按照 1.1~1.3 的操作步骤:
- 打开目标页面 → 启动开发者工具 → 切换到 Network → 筛选 Fetch/XHR → 强制刷新。
- 依次点击几个请求的 Preview,发现
/api/feed/profile这个接口返回了博主微博列表的 HTML 片段(没错,有些接口虽然长得像 API,但响应的内容却是 HTML,而不是纯 JSON)。 - 切换到 Headers 标签,记录下请求的 URL、查询参数和关键请求头。
目标接口的核心信息如下:
- 请求方法:
GET - URL:
https://m.weibo.cn/api/feed/profile - 查询参数:
uid(博主 ID,必填)、page(页码,从 1 开始) - 必要请求头:
User-Agent(移动端 UA)、Referer(博主主页地址)、X-Requested-With(XMLHttpRequest,标识这是一个 Ajax 请求)
3.2 完整 Python 实现代码
把通用请求模板和抓包结果结合起来,再用 parsel 解析返回的 HTML 片段,就能得到完整的爬取脚本:
4. 法律与道德红线(必须看!)
技术本身是中立的,但使用技术的人必须遵守规则,否则可能带来严重的法律风险。以下几点请一定牢记:
- 遵守 robots.txt:爬取前先访问目标网站的
https://域名/robots.txt,看看是否明确禁止了你要访问的路径。 - 设置合理的爬取间隔:建议至少
3 秒 / 请求,不要给目标服务器造成不必要的压力。 - 绝不爬取个人隐私数据:例如手机号、身份证号、私密朋友圈或私密微博等。
- 遵守相关法律法规:在国内进行数据采集,务必遵守《数据安全法》《个人信息保护法》《网络安全法》等法律法规。
总结
这篇教程带你从零开始,完成了现代 Ajax 爬取的基础入门:
- 用开发者工具找到隐藏的 Ajax 接口(筛选 Fetch/XHR → 查看 Preview)
- 完整模拟浏览器请求(curl 一键转换 → 添加
http2=True) - 入门级动态参数应对(使用 PyExecJS 执行前端加密逻辑)
- 遵守法律与道德红线
如果你在实战中遇到了更复杂的反爬手段(比如 TLS 指纹识别、WebAssembly 加密、行为验证码等),可以关注我们后续的进阶教程,一步一步攻克难题!

