Как я могу использовать url lib, используя файл json - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь получить данные из ссылки json, но я получаю эту ошибку: TypeError: не могу связать str с байтами

Это мой код:

l = "https://www.off---white.com/en/IT/men/products/omch016f18d471431088s"
url = (l+".json"+"?porcoiddio")
req = urllib.request.Request(url, headers)
response = urllib.request.urlopen(req)

size_opts = json.loads(response.decode('utf-8'))['available_sizes']

Как я могу решить эту ошибку?

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

вы предоставляете аргумент данных по ошибке…

вам придется использовать аргумент ключевого слова для заголовков, так как в противном случае второй аргумент будет заполнен позиционным вводом, который оказывается data , попробуйте это:

req = urllib.request.Request(url, headers=headers)

См. https://docs.python.org/3/library/urllib.request.html#urllib.request.Request для документации Запрос s подпись.

0 голосов
/ 02 октября 2018

Ответ на ваш вопрос: измените код на:

size_opts = json.loads(response.read().decode('utf-8'))['available_sizes']

Измените в 2018-10-02 22:55: я просматриваю ваш исходный код и обнаружил Response 503, причина, по которой вы получили 503:этот запрос не содержит куки:

req = urllib.request.Request(url, headers=headers)

Вы обновили свои заголовки.

headers.update({"Cookie":cookie_value})
req = urllib.request.Request(url, headers=headers) # !!!! you need a headers include cookies !!!!
0 голосов
/ 02 октября 2018

Вы могли бы вместо этого использовать запросы?

import requests, json
l = "https://www.off---white.com/en/IT/men/products/omch016f18d471431088s"
url = (l+".json"+"?porcoiddio")
session = requests.Session()
session.mount('http://', requests.adapters.HTTPAdapter(max_retries=10))
size_opts = session.get(url, headers= {'Referer': 'off---white.com/it/IT/login', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}).json()['available_sizes']

Чтобы проверить ответ:

size_opts = session.get(url, headers= {'Referer': 'off---white.com/it/IT/login', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'})
print(size_opts)

Дает

<Response [503]>

Этот ответ означает: "503 Сервис недоступен. Сервер в настоящее время не может обработать запрос из-за временной перегрузки или планового обслуживания "

Я хотел бы предположить, что проблема не в коде, а в сервере?

...