Лучше использовать современную библиотеку httpx а не requests
Если хочешь все таки чтобы через requests -
использовать мобильный прокси и на каждый запрос менять ip и тогда все также будет проходить через requests стабильно все и не требовать проверку капчи
import httpx
url = 'https://www.wildberries.ru/webapi/product/339182812/data?subject=104&kind=1&brand=311487279&lang=ru'
headers = {
'accept': '*/*',
'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
'deviceid': 'site_2a047e880327425b89fe726a55e5f479',
'dnt': '1',
'priority': 'u=1, i',
'referer': 'https://www.wildberries.ru/catalog/339182812/detail.aspx',
'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
'x-requested-with': 'XMLHttpRequest',
'x-spa-version': '13.3.3',
}
try:
with httpx.Client(
http2=True, # включит HTTP/2, если сервер поддерживает
headers=headers, # без копирования на каждый запрос
timeout=httpx.Timeout(connect=3.0, read=5.0, write=5.0, pool=5.0),
) as client:
resp = client.get(url)
resp.raise_for_status()
print(resp.request.headers) # аналог print(req.headers)
print(resp.json()) # прямой парсинг JSON без лишних копий
except httpx.HTTPError as e:
print(f"Возникла ошибка: {e}")
Результат
C:\proekts\wildberries_parser>parser4.py
Headers({'host': 'www.wildberries.ru', 'accept-encoding': 'gzip, deflate', 'connection': 'keep-alive', 'accept': '*/*', 'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7', 'deviceid': 'site_2a047e880327425b89fe726a55e5f479', 'dnt': '1', 'priority': 'u=1, i', 'referer': 'https://www.wildberries.ru/catalog/339182812/detail.aspx', 'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Linux"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', 'x-requested-with': 'XMLHttpRequest', 'x-spa-version': '13.3.3'}) {'resultState': 0, 'value': {'data': {'brandAndSubjectUrl': '/brands/311487279-onv/kedy', 'targetInfo': {'targetUrl': 'EX', 'targetCode': 0, 'sort': 0, 'targetUrlExtended': 'EX|||||||||'}, 'sitePath': [{'id': 629, 'name': 'Обувь', 'sort': 20, 'pageUrl': '/catalog/obuv', 'topMenuRenderer': 0, 'leftMenuRenderer': 0, 'landingPage': False, 'hash': 1115844598, 'xshardKey': 'blackhole', 'xquery': 'cat=629', 'noFollow': True, 'excludeFromBreadcrumbs': False, 'isTop': False, 'isDenyLink': True, 'rawQuery': 'subject=2;739'}, {'id': 751, 'parentId': 629, 'name': 'Мужская', 'sort': 20, 'pageUrl': '/catalog/obuv/muzhskaya', 'topMenuRenderer': 0, 'leftMenuRenderer': 0, 'landingPage': False, 'hash': -5142543, 'xshardKey': 'men_shoes', 'xquery': 'cat=751', 'noFollow': False, 'excludeFromBreadcrumbs': False, 'isTop': False, 'rawQuery': 'kind=1&subject=2', 'snippet': 'sizes'}, {'id': 8194, 'parentId': 751, 'name': 'Кеды и кроссовки', 'sort': 10, 'pageUrl': '/catalog/obuv/muzhskaya/kedy-i-krossovki', 'topMenuRenderer': 0, 'leftMenuRenderer': 0, 'landingPage': False, 'hash': 363037686, 'xshardKey': 'men_shoes', 'xquery': 'cat=8194', 'noFollow': False, 'excludeFromBreadcrumbs': False, 'isTop': False, 'rawQuery': 'kind=1&subject=104;105;128;130;396;1382;1586', 'snippet': 'sizes', 'searchQuery': 'menu_redirect_subject_v2_8194 мужские кеды и кроссовки'}, {'id': 0, 'name': 'O_N_V', 'sort': 0, 'pageUrl': '/brands/311487279-onv', 'topMenuRenderer': 0, 'leftMenuRenderer': 0, 'landingPage': False, 'hash': -1593255687, 'noFollow': False, 'excludeFromBreadcrumbs': False, 'isTop': False}]}}}