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

使用Python Requests获取JSON却返回HTML的问题求助

解决爬虫返回HTML而非JSON的常见思路

嘿,我明白你遇到的问题了——这种情况在新手写爬虫时超常见,别慌,咱们一步步排查:

1. 核对请求头(Request Headers)

服务器经常会通过请求头判断请求是否来自真实浏览器,而requests库默认的请求头很“朴素”,容易被识别为爬虫。你可以这么做:

  • 打开Chrome开发者工具(F12),切换到Network标签,找到那个返回JSON的请求,右键选择「Copy」→「Copy as cURL (bash)」
  • 把cURL里的User-Agent、Accept、Referer这些关键头信息摘出来,放到requests的请求里:
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "Accept": "application/json, text/javascript, */*; q=0.01",
    # 其他你从Chrome里复制的必要头
}

response = requests.get("你的目标URL", headers=headers)
print(response.json())  # 试试能不能解析成JSON

2. 检查是否需要携带Cookies

有些网站需要验证会话(比如登录状态、临时会话)才会返回JSON数据。你可以:

  • 回到Chrome的Network请求详情里,找到「Cookies」标签,把里面的Cookie键值对复制出来,加到请求里:
cookies = {
    "session_id": "xxx",
    # 其他你看到的Cookie
}

response = requests.get("你的目标URL", headers=headers, cookies=cookies)

或者用requests.Session()来维持会话,先模拟访问首页获取Cookies,再请求目标URL。

3. 确认请求方法和请求体

有时候你看到的URL需要用POST方法请求,而不是默认的GET。检查Chrome里的请求方法:

  • 如果是POST,还要看「Payload」标签里的参数,可能是form表单格式,也可能是JSON格式:
# 表单格式的POST请求
data = {
    "key1": "value1",
    "key2": "value2"
}
response = requests.post("你的目标URL", headers=headers, data=data)

# JSON格式的POST请求
json_data = {
    "key1": "value1"
}
response = requests.post("你的目标URL", headers=headers, json=json_data)

4. 排查是否是动态渲染的JSON

如果前面的方法都没用,可能这个JSON是页面加载后通过JavaScript动态生成的,不是直接请求URL返回的。这种情况你可以试试用selenium或者playwright模拟浏览器运行,等待页面渲染完成后提取数据,但这对新手来说稍复杂,先优先排查前面的三个问题。

另外,你可以先打印response.text看看返回的HTML内容里有没有提示(比如“请使用浏览器访问”“需要登录”),这能帮你更快定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:58:51