Python - Requests - JSONDecodeError Python - 请求 - JSON解码错误

7
我有这段代码:
import requests

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

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

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  

1
这个回答解决了你的问题吗?JSONDecodeError:期望值:第1行第1列(字符0) - Ulrich Eckhardt
在这个关于同一问题的咨询中,有一个解决方案。获取JSON格式的数据 - efueyo
2个回答

7

r.json() 期望API返回一个JSON字符串。API应该明确说明它通过响应头返回JSON。

在这种情况下,您请求的URL可能未正确响应JSON或未明确说明其正在响应JSON。

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

data = r.text
print(data)

如果响应可以被视为 JSON 字符串,请使用以下方式进行处理:
import json
data = json.loads(r.text)

注意: 您还可以检查 content-typeAccept 标头,以确保请求和响应的数据类型符合要求。

0
原因是因为响应没有返回JSON,而是整个HTML页面。尝试使用r.text而不是r.json()...,然后从那里做任何你想做的事情。
如果您不确定它返回的内容类型:
h = requests.head('https://www.instagram.com/p/CJDxE7Yp5Oj/?__a=1')
header = h.headers
contentType = header.get('content-type')
print(contentType)

根据您的URL,它返回text/html
或者,您可以尝试在请求中添加一个User-Agent - 这是为了模拟请求,使其看起来像来自浏览器而不是脚本。
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/46.0.2490.80'
}

r = requests.get('https://www.instagram.com/p/CJDxE7Yp5Oj/?__a=1', headers=headers)
data = r.json()

如果您访问以下网址:https://www.instagram.com/p/CJDxE7Yp5Oj/?__a=1您会发现它已经以JSON格式编写,我该如何使其响应? - Andre Solbach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接