Не парсит данные, собирает лишь часть
Надо спарсить названия брендов. https://www.farfetch.com/uk/shopping/men/hoodies-2/items.aspx?page=1&view=90&sort=4&q=hoodie При парсинге собираются данные только для первых 12 позиций, дальше почему то, данные не собирает. Название бренда лежит в теге p, который лежит в теге li. Всего на первой странице 90 позиций, которые надо получить, но почему то достаются данные только для первых двенадцати позиций.В коде сначала нахожу все div, с классом ltr-1bvlx7l e1awqx90, в них через цикл нахожу теги p, с классом e17j0z620 ltr-17q7kb6-Body-BodyBold eq12nrx0. В итоге получаю список с 12-ю элементами, а надо чтобы было 90 элементов. На 12-м элементе код останавливается, ошибок никаких нет, просто не собирает дальше данные.
import time
import requests
from bs4 import BeautifulSoup as bs
url = "https://www.farfetch.com/uk/shopping/men/hoodies-2/items.aspx?page=1&view=90&sort=4&q=hoodie"
headers = {
"Accept": "*/*",
"User-Agent": "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1"
}
r = requests.get(url, headers=headers)
src = r.text
soup = bs(src, 'lxml')
items = soup.find_all("div", class_="ltr-1bvlx7l e1awqx90")
spisok = []
for item in items:
all_products_hrefs = item.find("p", class_="e17j0z620 ltr-17q7kb6-Body-BodyBold eq12nrx0").get_text()
spisok.append(all_products_hrefs)
time.sleep(1)
print(spisok)
это результат который получаю
['Alpha Industries', 'Alpha Industries', 'adidas', 'PRÉVU', 'adidas', 'FIVE CM', 'FIVE CM', 'Fila', 'Reigning Champ', 'Ecoalf', 'FIVE CM', 'Dickies Construct']
[Скриншот страницы с исходным кодом]: https://i.stack.imgur.com/mXxCG.jpg
Ответы (1 шт):
Сайт динамический. Отлавливайте запросы или используйте селенимум
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0',
}
page = 1
params = {
'page': page,
'view': '90',
'sort': '4',
'q': 'hoodie',
'pagetype': 'Shopping',
'rootCategory': 'Men',
'pricetype': 'FullPrice',
'c-category': '136398',
}
response = requests.get(
'https://www.farfetch.com/uk/plpslice/listing-api/products-facets',
params=params,
headers=headers,
)
items = response.json()['listingItems']['items']
for i, x in enumerate(items, 1):
print(f'-- {i} --')
print(f"{x['shortDescription']} ({x['brand']['name']})")
print(x['priceInfo']['formattedFinalPrice'])
print('https://www.farfetch.com' + x['url'])
-- 1 --
logo drawstring hoodie (Alpha Industries)
£29
https://www.farfetch.com/uk/shopping/men/alpha-industries-logo-drawstring-hoodie-item-17965530.aspx?storeid=11155
-- 2 --
logo-print drawstring hoodie (Alpha Industries)
£31
https://www.farfetch.com/uk/shopping/men/alpha-industries-logo-print-drawstring-hoodie-item-17964433.aspx?storeid=11155
...
-- 89 --
logo-patch long-sleeve hoodie (FIVE CM)
£70
https://www.farfetch.com/uk/shopping/men/five-cm-logo-patch-long-sleeve-hoodie-item-19287933.aspx?storeid=12667
-- 90 --
logo-embroidered drawstring hoodie (Sun 68)
£70
https://www.farfetch.com/uk/shopping/men/sun-68-logo-embroidered-drawstring-hoodie-item-19153139.aspx?storeid=12045