首页 > 解决方案 > 从 Python 中的请求返回 JSON 文件

问题描述

我过去在其他网站上使用 POST 请求并从他们那里接收数据取得了一些成功,但由于某种原因,我在 metacritic 网站上遇到了困难。

使用 chrome 和开发人员工具,我可以看到当我开始在搜索栏中输入时,它会向以下 url 发起 POST 请求。

searchURL = 'http://www.metacritic.com/g00/3_c-6bbb.rjyfhwnynh.htr_/c-6RTWJUMJZX77x24myyux3ax2fx2fbbb.rjyfhwnynh.htrx2ffzytx78jfwhmx3fn65h.rfwpx3dcmw_$/$'

我也知道我的标题需要如下才能获得响应

headers = {'User-Agent' : "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"}

当我运行它时,我得到一个 200 的状态代码,表明它有效,但我的响应文本不是我所期望的。当我期待 json 的搜索结果时,我正在接收整个页面的内容。我在这里想念什么?

title = 'Grand Theft Auto'

#search request using POST
r = requests.post(searchURL, data = {'searchTerm' : title}, headers = headers)

print(r.status_code)

print(r.text)

你可以在下面的图片中看到我期望得到的东西。

标头

回复

标签: pythonhttppython-requests

解决方案


不确定差异 - 可能与 GDPR 相关,因为我住在欧洲,或者因为我在 Chrome 中将 DNT(不跟踪)设置为 true - 但对我来说,Metacritic 自动完成请求只是http://www.metacritic.com/autosearch将参数search_term设置为搜索值并search_filter设置为all

在此处输入图像描述

从您的屏幕截图中,我认为您的浏览器中自动完成的 URL 是使用您的会话 ID 构建的,也许是为了避免像您打算做的事情:)

因此,在您的情况下,我将按以下顺序尝试:

  • 发布到/autosearchURL,如果这不起作用
  • 找出会话 ID 到 URL 编写逻辑,然后在代码中发出初始请求以获取会话 ID 并使用它

推荐阅读