从Python中的请求返回JSON文件

时间:2018-06-01 18:46:03

标签: python http python-requests

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

使用chrome和开发人员工具,我可以看到当我开始在搜索栏中输入时,它会向以下网址发起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

1 个答案:

答案 0 :(得分:0)

不确定区别 - 也许GDPR相关,因为我住在欧洲,或者因为我在Chrome中将DNT(不跟踪)设置为true - 但对我来说,Metacritic自动填充请求只发布到0.2参数http://www.metacritic.com/autosearch设置为搜索值,search_term设置为search_filter

enter image description here

从您的屏幕截图中,我认为浏览器中自动填充的网址是使用您的会话ID构建的,可能是为了避免您打算这样做的事情:)

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

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