#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. Я не могу скопировать весь текст, проверьте это здесь