【问题标题】:Return JSON File from Requests in Python从 Python 中的请求返回 JSON 文件
【发布时间】:2018-06-01 18:46:03
【问题描述】:

过去我曾在其他网站上使用 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)

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

Headers

Response

【问题讨论】:

  • 一般可以使用r.json()方法获取json数据,但是这种情况下好像没有
  • 对,当我运行它时,它只返回 Chrome,你可以清楚地看到它应该返回一些东西。我没有正确设置标题或网址吗?

标签: python http python-requests


【解决方案1】:

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

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

所以在你的情况下,我会按以下顺序尝试:

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

【讨论】:

  • 感谢您的意见。我尝试使用 /autosearch URL,但没有成功。我必须更多地研究 session-id 的概念才能走这条路。
  • 这可能是一条地狱般的道路,也许尝试通过欧洲代理获取结果不那么痛苦(如果这种差异真的与 GDPR 相关) - 试试看freeproxylists.net/eu.html跨度>
猜你喜欢
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2016-01-29
  • 1970-01-01
  • 2012-06-19
相关资源
最近更新 更多