You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python requests库爬取网页时本地返回内容缺失目标元素如何解决

问题原因与解决方案

核心原因

你遇到的目标元素丢失问题,90%以上的概率是目标内容为JavaScript动态渲染生成:requests只能获取页面最初的静态HTML源码,不会像浏览器一样执行页面内嵌的JS代码,因此JS生成的元素不会出现在你拿到的html文本中,更换UA和基础headers自然无法解决问题。

排查步骤

  • 先在浏览器中打开目标页面,右键点击「查看网页源代码」,直接在源代码中搜索你要抓取的目标元素内容:
    • 如果能搜到:说明是反爬规则触发、请求头不全或者内容在iframe嵌套页中
    • 如果搜不到:完全确认是JS动态渲染导致

适配原生库的解决方案

因为你只能使用Python原生相关库,可按优先级选择以下方案:

方案1:直接请求数据接口(最优)

动态渲染的内容绝大多数是页面通过AJAX请求后端接口拿到数据后生成的,你可以直接抓对应接口获取数据:

  1. 打开浏览器F12开发者工具,切换到「网络」面板,刷新页面后筛选「XHR/ Fetch」类型的请求
  2. 逐个查看请求的响应内容,找到包含你需要的目标数据的接口
  3. 模拟请求该接口即可,不需要解析HTML,效率更高
    参考代码:
import requests

# 替换为你抓到的真实数据接口地址
api_url = "你抓到的接口地址"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0',
    # 补充浏览器中该接口请求带的其他必要头,比如Referer、Cookie、自定义token字段等
}
# 接口一般返回JSON格式,直接解析即可
data = requests.get(api_url, headers=headers).json()

方案2:补全请求头/处理iframe

如果排查后确认内容在静态源码中,只是没拿到完整页面:

  • 把浏览器中对应页面请求的所有请求头全部复制到你的headers参数中,逐个删除测试,找出必须的请求字段(常见缺失的是Referer、Cookie字段)
  • 检查页面是否有iframe标签,你要的内容如果在iframe中,需要单独请求iframe的src属性对应的地址

方案3:内置库调用本地浏览器渲染(极端情况)

如果必须要渲染JS且不能用第三方工具,可以用Python内置的subprocess调用系统自带的浏览器无头模式执行页面后拿完整源码,不过兼容性较低,优先选前两种方案。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:45:07