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

POST请求返回HTML而非JSON,Python爬虫无法获取目标JSON数据

解决UMass People Finder POST请求返回HTML而非JSON的问题

我来帮你排查一下问题所在,你遇到的情况很常见——浏览器里能看到JSON,但用requests请求却拿到了页面HTML,通常是因为请求的URL不对或者请求参数/头信息不匹配。

问题分析

你现在请求的是主页面https://www.umass.edu/peoplefinder/,但实际处理搜索请求的API端点大概率是另一个路径。Chrome DevTools里看到的JSON响应,对应的请求URL应该不是这个主页面地址,而是一个专门的接口(比如/peoplefinder/search这类)。

另外,你的请求头和数据格式可能也和浏览器实际发送的不匹配,导致服务器返回了默认的HTML页面而非JSON响应。

解决方案步骤

1. 找到正确的API端点

打开Chrome DevTools的Network标签,重新执行搜索操作,找到返回JSON的那个POST请求,复制它的Request URL。比如这个网站的搜索接口实际是https://www.umass.edu/peoplefinder/search(你可以自己验证一下)。

2. 匹配浏览器的请求头和数据格式

浏览器发送请求时会带上很多必要的头信息,比如User-Agent、Referer,有些接口还要求这些头才能返回正确的响应。另外要注意Content-Type:如果浏览器里看到的是application/x-www-form-urlencoded,那你就不需要用json.dumps,直接传字典格式的data即可。

3. 修正后的代码示例

下面是调整后的代码,你可以根据实际抓到的请求信息修改:

import requests

# 替换成你从DevTools里找到的真实API URL
url = "https://www.umass.edu/peoplefinder/search"

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',
    'Referer': 'https://www.umass.edu/peoplefinder/',
    'Content-Type': 'application/x-www-form-urlencoded'  # 根据实际情况调整,可能是这个而非application/json
}

# 如果接口接受表单数据,直接传字典
search_data = {'q': 'Alex'}

response = requests.post(url, data=search_data, headers=headers)

# 先检查响应状态码,确认请求成功
print(response.status_code)
# 再解析JSON
content = response.json()
print(content)

额外提示

  • 如果还是拿到HTML,检查是否需要携带Cookie:有些网站会验证会话Cookie,你可以从DevTools里复制Cookie信息,加到headers里('Cookie': 'xxx=xxx; yyy=yyy')。
  • 仔细对比浏览器发送的请求和你的代码请求的所有参数(包括Query String、Form Data、Headers),确保完全一致,服务器才会返回预期的JSON响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:59:01