Python-请求-JSONDecodeError

And*_*ach 8 python json python-requests

我有这个代码:

import requests

r = requests.get('https://www.instagram.com/p/CJDxE7Yp5Oj/?__a=1')
data = r.json()['graphql']['shortcode_media']
Run Code Online (Sandbox Code Playgroud)

为什么我会收到这样的错误?

C:\ProgramData\Anaconda3\envs\test\python.exe C:/Users/Solba/PycharmProjects/test/main.py  
Traceback (most recent call last):  
  File "C:/Users/Solba/PycharmProjects/test/main.py", line 4, in <module>  
    data = r.json()  
  File "C:\ProgramData\Anaconda3\envs\test\lib\site-packages\requests\models.py", line 900, in json  
    return complexjson.loads(self.text, **kwargs)  
  File "C:\ProgramData\Anaconda3\envs\test\lib\json\__init__.py", line 357, in loads  
    return _default_decoder.decode(s)  
  File "C:\ProgramData\Anaconda3\envs\test\lib\json\decoder.py", line 337, in decode  
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())  
  File "C:\ProgramData\Anaconda3\envs\test\lib\json\decoder.py", line 355, in raw_decode  
    raise JSONDecodeError("Expecting value", s, err.value) from None  
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)  
  
Process finished with exit code 1  
Run Code Online (Sandbox Code Playgroud)

ver*_*der 8

r.json()期望 API 返回 JSON 字符串。API 应明确表示它正在通过响应标头使用 JSON 进行响应。

在这种情况下,您请求的 URL 要么未使用正确的 JSON 进行响应,要么未明确说明它正在使用 JSON 进行响应。

您可以首先通过以下方式检查 URL 发送的响应:

data = r.text
print(data)
Run Code Online (Sandbox Code Playgroud)

如果响应可以被视为 JSON 字符串,那么您可以使用以下方式处理它:

import json
data = json.loads(r.text)
Run Code Online (Sandbox Code Playgroud)

注意:您还可以检查content-typeAccept标头以确保请求和响应采用所需的数据类型