Почему я получаю сообщение об ошибке при использовании .json()?

#python #json #error-handling #python-requests

Вопрос:

Я получил ошибку при использовании .json(), я следовал учебнику, когда писал это, я почти уверен, что ничего не изменил, но это не работает

Код:

 import requests
import os #not used
import json #not used
import shutil #not used

header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"}

url = "https://www.instagram.com/p/CRlNMq5KawJ/"
tail = "?__a=1"
full_url = url   tail

response = requests.get(full_url, headers=header).json()

image_location = response["graphql"]["shortcode_media"]["display_resources"]
image_location = image_location[2].get("src")
print(image_location)
 

Ошибка:

     Traceback (most recent call last):
  File "C:Users3001lPycharmProjectsInstagram_BotInsta_Downloader.py", line 12, in <module>
    response = requests.get(full_url, headers=header).json()
  File "C:Users3001lPycharmProjectsInstagram_Botvenvlibsite-packagesrequestsmodels.py", line 910, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:Users3001lAppDataLocalProgramsPythonPython39libjson__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:Users3001lAppDataLocalProgramsPythonPython39libjsondecoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:Users3001lAppDataLocalProgramsPythonPython39libjsondecoder.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. Вы пытались увидеть, какой ответ на самом деле возвращается?

2. Вы предполагаете, что в ответе есть значение JSON для декодирования. Это неверно, если вы получите (например) ответ 404 вместо ответа 200.

3. Без буквального текста ответа ( до преобразования в JSON) на этот вопрос нельзя ответить-мы можем строить догадки, но мы здесь не для этого.

4. Я не могу воспроизвести ошибку с этим URL-адресом. Возможно, вас блокирует брандмауэр, или вас блокирует Instagram. Если вы отправляете слишком много запросов, вы можете превысить лимит скорости.

5. Мы можем строить догадки, просто попробовав 😉 Instagram не любит анонимных звонков в него и устанавливает довольно строгое ограничение на его доступ. Если вы печатаете response.status_code , я предполагаю 429 , что вы получите ошибку «Слишком много запросов»

Ответ №1:

Вероятно,это связано с тем, что ответ не является самим json или неправильно отформатирован в формате json. попробуйте распечатать запросы.get(full_url, заголовки=заголовок)

Комментарии:

1. К общему и неправильному в данном случае, он получает ошибку ограничения запроса..

Ответ №2:

Какая-то ошибка с вашими заголовками, они работают, для меня.

 import requests

headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0"}

response = requests.get("https://www.instagram.com/p/CRlNMq5KawJ/?__a=1",headers=headers)

if response.status_code != 200:
    print("Some error happened, review response.text")
else:
    content = response.json()
 

Комментарии:

1. Idk, если смогу, но я попробовал ваш код, и это не работает для меня, ошибка все еще в части .json (), последней строке в вашем случае. Также пробовал с другим ПК

2. Вы получили код состояния == 200? и это все еще не работает?

3. Точно, я пробовал и с вашим агентом пользователя, и с моим, но код статуса всегда 200, я пробовал это на pycharm и в онлайн-интерпретаторе, то же самое.

4. Каково содержание response.text

5. Я не могу скопировать весь текст, проверьте это здесь