python - 从 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)
你可以在下面的图片中看到我期望得到的东西。
解决方案
不确定差异 - 可能与 GDPR 相关,因为我住在欧洲,或者因为我在 Chrome 中将 DNT(不跟踪)设置为 true - 但对我来说,Metacritic 自动完成请求只是http://www.metacritic.com/autosearch
将参数search_term
设置为搜索值并search_filter
设置为all
:
从您的屏幕截图中,我认为您的浏览器中自动完成的 URL 是使用您的会话 ID 构建的,也许是为了避免像您打算做的事情:)
因此,在您的情况下,我将按以下顺序尝试:
- 发布到
/autosearch
URL,如果这不起作用 - 找出会话 ID 到 URL 编写逻辑,然后在代码中发出初始请求以获取会话 ID 并使用它
推荐阅读
- adonis.js - 在使用 Nuxt.js 的聊天对话中,如何在页面加载时向下滚动到特定 div 的底部?
- linux - 在 WSL2 中替代 systemd 用于 Kafka 安装
- c# - Entity Framework Core 无法更新包含相关对象的对象
- c# - 角色授权抛出“此工作站与主域之间的信任关系失败”
- sql - PostgreSQL LEFT JOIN 与 SUM 和算术运算符
- bixby - 我可以让 Bixby 在 Bixby Studio 中播放音乐吗?
- javascript - 全部显示在选项点击
- azure - 我可以使用 Terraform 获取 Azure Function App 默认主机密钥吗?
- curl - 是否有可能在 nifi 处理器中添加敏感字段?
- javascript - Object 构造函数是如何出现在任何函数的原型对象中的?