随着前端技术的发展,越来越多的网站采用异步加载来渲染数据,传统的 requests 加静态 HTML 解析方式经常拿不到目标内容;与此同时,各类反爬手段也让采集脚本容易中途失效。本文以实战视角,梳理从定位数据、抓取动态页面到应对反爬的完整流程,帮助你在合规前提下稳定完成采集任务。
一、先搞清楚:数据到底藏在哪里
打开目标页面后不要急着写代码。第一步是按 F12 打开开发者工具,切换到 Network 面板并筛选 XHR/Fetch 请求,再刷新页面观察加载过程。如果能在某个接口的响应中直接看到列表、价格、评论等数据,说明数据来自后端 API,直接请求该接口往往比解析 HTML 更高效、更稳定。
如果 XHR 中找不到目标数据,且查看网页源代码(Ctrl+U)也没有对应内容,基本可以判断数据由 JavaScript 在浏览器端渲染生成,属于典型的动态页面,需要换一种抓取思路。
二、抓取动态网页的两条路线
路线一:逆向接口,直接请求。 分析 XHR 请求的 URL、方法、参数和请求头,用 requests 或 httpx 模拟同样的调用。优点是速度快、资源占用低,适合批量采集;难点是部分接口带有加密参数(如 sign、token),需要阅读前端 JS 代码或借助断点调试还原加密逻辑。
路线二:浏览器自动化。 当接口加密复杂、参数难以还原,或页面需要登录、滑动验证等交互时,可以用 Selenium 或 Playwright 驱动真实浏览器加载页面,等元素渲染完成后再提取内容。Playwright 还支持拦截网络请求,能边渲染边捕获接口响应,兼顾两种方式的优点。它的缺点是速度慢、资源消耗大,建议使用无头模式,并用等待特定元素出现的方式替代固定 sleep,避免无效等待。
三、应对常见反爬的实用手段
- 请求头伪装:补全 User-Agent、Referer、Origin 等字段,与真实浏览器保持一致,必要时定期轮换 UA。
- IP 层面:遇到频率限制或封禁时接入代理池,控制单 IP 请求频率,重试时自动切换出口。
- Cookie 与会话:用 Session 维持登录态和访问轨迹;部分网站会校验 Cookie 中的动态字段,可先访问首页或指定接口获取。
- 节奏控制:请求之间加入 1~3 秒随机延时,让访问模式更接近真人,避免在整点等敏感时段集中请求。
- 验证码与 JS 挑战:简单图形验证码可借助 OCR 或打码平台处理;滑块、点选类验证码需评估实现成本与合规风险;面对 Cloudflare 等环境检测,可尝试 Playwright 隐身方案或第三方解析服务。
同时要守住底线:遵守目标网站的 robots 协议和服务条款,控制采集规模,不抓取个人隐私和商业敏感数据。
四、把流程工程化
一个稳定的爬虫项目通常包含四个模块:请求层(负责重试、超时、代理切换)、解析层、存储层(CSV、SQLite 或 MongoDB)以及调度与日志。把目标 URL、并发数、代理地址等配置从代码中抽离,便于切换目标;用 logging 记录每次失败的原因,出现大面积异常时自动降速或暂停。上线前先用小批量数据跑通全链路,确认字段完整、去重逻辑正确,再逐步放大任务量。
掌握先分析、再选路线、后对抗、最后工程化这套流程,比记住任何一段代码都更重要。动态网页和反爬手段会不断变化,但定位数据、模拟请求、控制节奏的思路是长期通用的。