Ошибка, json не выдает ответ
Написал пример парсера на wb(простро тренируюсь), при запуске кода выдает ошибку "raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) requests.exceptions.JSONDecodeError: [Errno Expecting value] : 0" И еще, хотелось узнать, правильную ли библиотеку я импортировал что-бы сохранять результат в xlsx. Можете так же что-то порекомендовать по коду.
from dataclasses import dataclass
import requests
import json
import pyexcel_xlsx as pe
@dataclass
class Constructor:
id: int
title: str
url: str
price: float
def __post_init__(self):
if self.price:
self.price = self.price / 100
def get_requests(page: int):
headers = {
'Accept': '*/*',
'Accept-Language': 'ru,en-US;q=0.9,en;q=0.8,ru-RU;q=0.7',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Origin': 'https://www.wildberries.ru',
'Pragma': 'no-cache',
'Referer': 'https://www.wildberries.ru/catalog/detyam/konstruktory?sort=popular&page=97&xsubject=945',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'cross-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
'authorization': 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3MTMxODYzNTQsInZlcnNpb24iOjIsInVzZXIiOiIzNjkwMTgzNyIsInNoYXJkX2tleSI6IjMiLCJjbGllbnRfaWQiOiJ3YiIsInNlc3Npb25faWQiOiIyNzU1ZDI5OWY1YjE0Y2UwODBlMjJhZDhiNTkxMmQwOCIsInVzZXJfcmVnaXN0cmF0aW9uX2R0IjoxNjc1MTExMTc1LCJ2YWxpZGF0aW9uX2tleSI6IjUxMGZkMmI5YWVmMzlkMTZhYWQ5MmE4YjllNjYwNGVjODBjZTA4MzRkZDkzZGVlYThiZTc0NWJlZTg0YmVlYTgiLCJwaG9uZSI6InphcVdYVXl5bGhjbGtTYm14aFpGQkE9PSJ9.qreFSx599wYPh-VhuS00dm1hHfo05_MGvUETomZVeQfd4oaf8GZplmDdNKDzwl8wkEfd6BCYSX6ewewByoBqMNNTgap26CKftLo1Aef5KKsfxlBanLwBJarN75NQQ-DiDthuXp4rM_fwIVJfl1m7jPBLb_P7qQmmIt9I2_U0YfeJbJwREjQcaUDFKQgVgbfXy4eCOhTRiKQNDPxBlWBHgJFn0xgtBjPzgOGu7ZIJH1bmZhWTKX9MMCcr2OyU-hL_F2K4vQXwgIUSf5epGsI-2pnosXiz_jg1IWorh03j8GBtmisa3rMBny_IRZcVvDS5wME8lvQAolwxggc6Ozi1ig',
'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
}
params = {
'page': page,
'appType': '1',
'cat': '60806',
'curr': 'rub',
'dest': '-7815599',
'page': '97',
'sort': 'popular',
'spp': '30',
'uclusters': '7',
'xsubject': '945',
}
response = requests.get('https://catalog.wb.ru/catalog/toys1/v2/catalog', params=params, headers=headers)
return response.json()
def validate_json(res_json: json)->list[Constructor]:
all_constructor_in_page = []
for constructor in res_json["products"]:
all_constructor_in_page.append(
Constructor(
id=constructor["id"],
title=constructor["name"],
price=constructor["sizes"]["price"]["total"]
)
)
return all_constructor_in_page
def save(list_constructor: list[Constructor]):
data = [
["id", "Название", "Цена"],
]
for constructor in list_constructor:
data.append([
constructor.id,
constructor.title,
constructor.price
])
book_data = {"Sheet_1": data}
new_book = pe.Book(book_data)
new_book.save_as("constructor.xlsx")
def parse():
all_constructor = []
for page in range(1, 3, 1):
res = get_requests(page=page)
all_constructor += validate_json(res)
save(all_constructor)
if __name__=='__main__':
parse()
Ответы (1 шт):
Автор решения: Сергей Ш
→ Ссылка
import requests
page = 1
params = {
'page': page,
'appType': '1',
'cat': '60806',
'curr': 'rub',
'dest': '-7815599',
'sort': 'popular',
'spp': '30',
'uclusters': '7',
'xsubject': '945',
}
response = requests.get('https://catalog.wb.ru/catalog/toys1/v2/catalog', params=params)
for constructor in response.json()["data"]["products"]:
_id = constructor["id"]
title = constructor["name"]
price = constructor["sizes"][0]["price"]["total"]
print(_id, title, price)
# 139900955 Конструктор лего minecraft подарочный набор 109800
# 143206489 Конструктор lego музыкальный замок Disney подарок 192800
# ...
# 176716693 Конструктор Bionicle Лава монстр, 114 деталей Аналог 51500
# 172846500 Elves, Кот ведьмы Джинкс 36300