【发布时间】: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