Очистка вложенного элемента на странице электронной коммерции (цвета образцов продукта) с использованием Selenium - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь очистить имена цветов образцов продукта ('alt') и img srcs с веб-сайта Ulta, когда элемент образца вложен и не имеет имени класса. Результат моего парсинга включает в себя другие элементы, которые мне не нужны, но я не уверен (также новичок в python и парсинге), как их удалить.

URL: https://www.ulta.com/born-this-way-undetectable-medium-full-coverage-foundation?productId=xlsImpprod12621017

Скриншот html:

Screenshot

Мой код:

driver = webdriver.Chrome(chromedriver)
driver.get(url)
time.sleep(10)

shade_names = []

elems = driver.find_elements_by_class_name('Loader__small')
for elem in elems:
    img = elem.find_element_by_tag_name('img')
    name = img.get_attribute('alt').encode('utf-8')
    shade_names.append(name)

print(shade_names)

Результаты моего кода (Мне не нужен текст перед «Облако (светлый с розовым оттенком)» и кавычки в конце):

«Ulta Beauty Collection», «Chanel», «Anastasia Beverly Hills» , «Clinique», «Urban Decay Cosmetics», «Bumble and Bumble», «Tom Ford», «Tarte Cosmetics», «Makeup Revolution», «Kiehl's», «Morphe», «Too Faced», «Fan fave», 'Too Faced Born This Way Undetectable Medium-to-Full Coverage Foundation Natural Beige (легкий средний с нейтральным оттенком) # 0', 'Too Faced Born This Way Undetectable Medium-to-Full Coverage Foundation Natural Beige (светлый средний с нейтральным оттенком) оттенки) # 1 ',' Too Faced Born This Way Undetectable Foundation от среднего до полного покрытия Natural Beige (светлый средний с нейтральные оттенки) # 2 ',' Too Faced Born This Way Undetectable Medium-to-Full Coverage Foundation Natural Beige (легкий средний с нейтральными полутонами) # 3 ',' Too Faced Born This Way Undetectable Medium-to-Full Coverage Foundation Natural Бежевый (светлый средний с нейтральным оттенком) # 4 ',' Too Faced Born This Way Undetectable Medium-to-Full Coverage Foundation Natural Beige (светлый средний с нейтральным оттенком) # 5 ',' Shade Finder Image ',' Natural Beige (светлый средний с нейтральным оттенком) выбран »,« Облако (светлый с розовым оттенком) »,« Лебедь (светлый с нейтральным оттенком) »,« Снег (светлый с розовым оттенком) »,« Слоновая кость (светлый с розовым оттенком) ». золотые полутоны) ',' Жемчуг (очень светлый с розовыми полутонами) ',' Миндаль (очень светлый с золотыми полутонами) ',' Морская ракушка (очень светлый с розовыми полутонами) ',' Фарфор (очень светлый с нейтральными полутонами) ) ',' Ваниль (светлый с нейтральным оттенком) ',' Нюд (очень легкий с розовым оттенком) ',' Теплый нюд (очень светлый с нейтральным оттенком) ',' Светло-бежевый (светлый с нейтральным оттенком). тона) ',' выбран натуральный бежевый (светлый средний с нейтральными полутонами) ',' золотисто-бежевый (светлый с золотыми полутонами) ',' теплый бежевый (средний с нейтральными полутонами) ',' песочный (средний с золотистыми полутонами) ) ',' Golden (средний с розовым оттенком) ',' Praline (средний коричневый с золотистым оттенком) ',' Warm Sand (коричневый с золотистым оттенком) ',' Мед (коричневый с нейтральным оттенком) ',' Карамель (насыщенный загар с нейтральным оттенком), «Брюле (насыщенный загар с золотистыми оттенками)», «Мокко (насыщенный загар с розовыми оттенками)», «Масло пекан (богатый загар с золотистыми оттенками)», «Клен (глубокий с нейтральным оттенком), «Каштан (глубокий с золотым оттенком)», «Чай (глубокий с золотым оттенком)», «Красное дерево (очень глубокий с золотым оттенком)», «Пряный ром (очень глубокий с золотым оттенком)». / розовый оттенок) »,« Фундук (самый глубокий с розовым оттенком) »,« Какао (самый глубокий с нейтральным оттенком) »,« Тирамису (самый глубокий с золотистым оттенком) »,« Соболь (богатый с розовым оттенком) », 'Трюфель (богатый с золотым оттенком)', 'Ганаш (самый богатый с нейтральным оттенком ) ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '

1 Ответ

1 голос
/ 05 мая 2020

После строки time.sleep(10) я добавил следующую часть кода. Для меня это работает. Пожалуйста, попробуйте и для вас.

CODE

time.sleep(10)

shade_names = []

elems = driver.find_elements_by_class_name('ProductSwatches__Cell')
for elem in elems:
    img = elem.find_element_by_tag_name('img')
    name = img.get_attribute('alt')
    name = name.split(' ')[0]
    shade_names.append(name)

print([x for x in shade_names if x])

Для меня результат таков:

['Cloud' , «Лебедь», «Снег», «Слоновая кость», «Жемчуг», «Миндаль», «Ракушка», «Фарфор», «Ваниль», «Нюд», «Теплый», «Светлый», «Натуральный», « Golden, Warm, Sand, Golden, Praline, Warm, Honey, Caramel, Brulee, Mocha, Butter, Maple, Chestnut. , «Чай», «Красное дерево», «Пряный», «Фундук», «Какао», «Тирамису», «Соболь», «Трюфель», «Ганаш»]

Я видел, что там 36 цветов, поэтому результат счетчика также правильный.

...