не парсит данные
Надо спарсить данные, название бренда, цену. Сайт динамический. Парсит только первые 32 значения, остальне не берет. Откуда можно подтянуть остальные данные? JSON не нашел, быть может есть какой то другой вариант? Желательно с помощью requests.
import requests
from bs4 import BeautifulSoup as bs
import time
url = 'https://www.zalando.co.uk/men/?q=hoodie&order=price&dir=asc'
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0'
}
r = requests.post(url, headers = headers)
#print(r.status_code)
src = r.text
soup = bs(src, 'lxml')
items = soup.find_all('div', class_='DT5BTM w8MdNG cYylcv _1FGXgy _75qWlu iOzucJ JT3_zV vut4p9')
num = 0
for i in items:
num = num + 1
print(num)
try:
brand_name = i.find('div', class_='_3KN5mc').find('h3')
print(brand_name)
time.sleep(1)
except Exception:
data = "None"
print(data)
Ответы (2 шт):
Автор решения: Даня
→ Ссылка
Продукты запрашиваются через POST запрос на https://www.zalando.co.uk/api/graphql/ увидеть это вы можете открыв консоль (F12) перейти на вкладку Network => Fetch/XHR
Автор решения: Сергей Ш
→ Ссылка
import requests
from bs4 import BeautifulSoup as bs
import json
url = 'https://www.zalando.co.uk/men/?q=hoodie&p=1&order=price&dir=asc'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0'
}
r = requests.get(url, headers=headers)
soup = bs(r.text, 'lxml')
items = soup.find('script', class_="re-data-el-hydrate")
dct = json.loads(items.text)['graphqlCache']
qq = (z['data']['product']['name'] for x, z in dct.items() if '8a351c55e39' in x)
for i,x in enumerate(qq, 1):
print(i, x)
1 CORE HOODIE BIG & TALL - Hoodie - dusty pink
2 EMBROIDERED - Sweatshirt - light green
...
83 RAINBOW HEART HOODIE PRIDE UNISEX - Hoodie - black
84 UNISEX - Hoodie - bordeaux