【问题标题】:Print all incoming XHR requests python打印所有传入的 XHR 请求 python
【发布时间】:2020-03-01 12:09:45
【问题描述】:

我想从 URL 获取所有 XHR 请求。

当我检查站点并转到 yo Network -> XHR 时,我看到多个 XHR 链接,我想在加载完成后将它们全部获取。我想我需要 selenium 和 requests 的组合。

我在 SO here 上找到了以下代码,但它没有给我任何输出并且给我一个错误。

我寻找了其他问题,但似乎很多人都没有这个问题。

错误:

File "C:\ProgramData\Anaconda3\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None

JSONDecodeError: Expecting value

我的代码:

####   Gets all XHRs ####
import requests

url= "https://forsikringsguiden.dk/#!/"

headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
           "X-Requested-With" : "XMLHttpRequest",
           "Host" : "forsikringsguiden.dk",
           "Referer" : "https://forsikringsguiden.dk/"}

response = requests.get(url, headers=headers)

xhr = response.json()
print(xhr)

编辑: 我需要在我的代码中添加任何参数吗?

【问题讨论】:

  • 如果您在xhr = response.json() 之前插入print(response.headers['Content-Type']),您会看到页面返回的是HTML 而不是JSON。您可以使用 print(response.text) 查看 HTML。
  • 我知道如何获取 HTML。但这不是这里的问题。
  • 这正是问题所在。您无法从 HTML 响应中获取 JSON (response.json())。如果您知道服务器可以返回 JSON 响应,那么您可能需要添加一个 "Accept: application/json" 标头。或者您可能需要询问服务器管理员如何格式化您的请求,以便它返回 JSON 响应。

标签: python


【解决方案1】:

您需要与网站维护人员协调。他们将能够说出您需要发送哪些标头或参数才能获得 JSON 响应。或者如果他们甚至完全支持 JSON。

在给出实际返回 JSON 的 URL 的情况下,您的原始代码可以工作:

import requests

url= "http://api.plos.org/search?q=title:DNA"

headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
           "X-Requested-With" : "XMLHttpRequest"}

response = requests.get(url, headers=headers)

xhr = response.json()
print(xhr)

【讨论】:

    猜你喜欢
    • 2020-05-24
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多