Появилось свободное время и продолжил на практике изучать python. В итоге программа-парсер модифицировалась до следующего состояния:
import requests
from bs4 import BeautifulSoup as bs
headers = {'accept': '*/*', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0'}
base_url = 'https://www.yoox.com/ru/%D0%B4%D0%BB%D1%8F%20%D0%BC%D1%83%D0%B6%D1%87%D0%B8%D0%BD/%D0%BE%D0%B4%D0%B5%D0%B6%D0%B4%D0%B0/shoponline#/dept=clothingmen&gender=U&season=X'
def yoox_parse(base_url, headers):
session = requests.Session()
request = session.get(base_url, headers=headers)
clothes = []
if request.status_code == 200:
soup = bs(request.content, 'html.parser')
divs = soup.find_all('div', attrs={'class': 'col-8-24'})
for div in divs:
brand = div.find('div', attrs={'class': 'brand font-bold text-uppercase'})
group = div.find('div', attrs={'class': 'microcategory font-sans'})
old_price = div.find('span', attrs={'class': 'oldprice text-linethrough text-light'})
new_price = div.find('span', attrs={'class': 'newprice font-bold'})
price = div.find('span', attrs={'class': 'fullprice font-bold'})
size = div.find('span', attrs={'class': 'aSize'})
href = div.find('div', attrs={'a': 'href'})
art = div.find('div', attrs={'div': 'data-current-cod10'})
print(art)
if brand and group:
clothes.append({
'art': art,
'href': href,
'size': size,
'brand': brand.get_text(),
'group': group.get_text(strip=True),
'old_price': old_price,
'new_price': new_price,
'price': price,
})
print(clothes)
else:
print('ERROR')
yoox_parse(base_url, headers)
За счет
if brand and group: удалось отсечь элементы кривой верстки. Но появились еще проблемы, с которыми я пока своими силами справиться не могу.
- Так как элементы
price,
old_price и
new_price есть не у всех товаров, то нельзя применить к ним метод
get_text() чтобы отсечь html тэги. Так же, не знаю как отсечь в значении валюту “руб” чтобы потом проводить с данными арифметические операции.
- Элемент
size может иметь несколько значений, но заполняется только первым. Я так понимаю, нужно сделать цикл for для перебора элементов, но мои эксперименты результатов не дали.
- элементы
href и
art, по загадочной для меня причине, я собрать не могу.
Не остается ничего другого, как снова просить помощи у коллективного разума. Заранее благодарю за помощь.