python - 使用 Selenium 在电子商务页面(产品样本颜色)上抓取嵌套元素
问题描述
当色板元素嵌套且没有类名时,我试图从 Ulta 的网站上抓取产品色板颜色名称 ('alt') 和 img srcs。我的抓取结果包括我不想要的其他元素,但我不确定(对于 python 和抓取也是非常新的)如何删除它们。
html截图:
我的代码:
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)
我的代码的结果(我不想要'Cloud (fairest w/ rosy undertones)'之前的文本和尾部的引号):
“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 Faces Born This Way Undetectable中度至全覆盖粉底自然米色(浅中度带中性底色)#1'、'Too Faced Born This Way Undetectable Medium-to-Full Coverage Foundation Natural Beige(浅中度带中性底色)#2'、'Too Faced Born This Way 无法察觉的中度至全覆盖粉底自然米色(浅中度带中性底色)#3'、'Too Faced Born This Way 无法察觉的中度至全覆盖度粉底自然米色(轻中度带中性底色) ) #4', 'Too Faced Born This Way Undetectable Medium-to-Full Coverage Foundation Natural Beige(浅色中性底色)#5', 'Shade Finder Image', 'Natural Beige(浅色中性色/中性底色)已选择”、“云朵(带有玫瑰色底色)”、“天鹅色(带有中性底色)”、“雪色(带有玫瑰色底色)”、“象牙色(带有金色底色)”、“珍珠色(非常白,带有玫瑰色底色)','杏仁(非常白,带有金色底色)','贝壳(非常白,带有玫瑰色底色)',“瓷器(非常白,带有中性底色)”,“香草(带有中性底色)”,“裸色(非常轻,带有玫瑰色底色)”,“暖裸色(非常轻,带有中性底色)”,“浅色米色(带中性底色的浅色)'、'已选择自然米色(带中性底色的浅色)'、'金色米色(带金色底色的浅色)'、'暖米色(带中性底色的中色)'、'沙色(中等带金色底色)'、'金色(中等带玫瑰色底色)'、'果仁糖(中等棕褐色带金色底色)'、'暖沙色(棕褐色带金色底色)'、'蜂蜜(棕褐色带/中性底色)','焦糖(浓郁棕褐色,带有中性底色)','布鲁里(浓郁棕褐色,带有金色底色)','摩卡(浓郁棕褐色,带有玫瑰色底色)',“黄油山核桃(最浓郁的棕褐色,带有金色底色)”,“枫木(深带有中性底色)”,“栗色(深带有金色底色)”,“柴(深带有金色底色)”,“桃花心木(非常深带金色底色)'、'五香朗姆酒(带玫瑰色底色非常深)'、'榛子(带玫瑰色底色最深)'、'可可(带中性底色最深)'、'提拉米苏(带金色底色最深) undertones) ', 'Sable (rich w/ rosy undertones) ', 'Truffle (rich w/ gold undertones)', 'Ganache (richest w/neuttone undertones) ', '', '', '', '', ' ', '', '', '', '', '', '', ''枫木(深沉,带中性底色)','栗木(深沉,带金色底色)','柴(深带金色底色)','桃花心木(深沉,带金色底色)','五香朗姆酒(深沉)带有玫瑰色底色)','榛子(带有玫瑰色底色的最深)','可可(带有中性底色的最深)','提拉米苏(带有金色底色的最深)','Sable(带有玫瑰色底色的浓郁)' , '松露(丰富的带有金色底色)', 'Ganache(最丰富的带有中性底色)', '', '', '', '', '', '', '', '', '', '', '', ''枫木(深沉,带中性底色)','栗木(深沉,带金色底色)','柴(深带金色底色)','桃花心木(深沉,带金色底色)','五香朗姆酒(深沉)带有玫瑰色底色)','榛子(带有玫瑰色底色的最深)','可可(带有中性底色的最深)','提拉米苏(带有金色底色的最深)','Sable(带有玫瑰色底色的浓郁)' , '松露(丰富的带有金色底色)', 'Ganache(最丰富的带有中性底色)', '', '', '', '', '', '', '', '', '', '', '', ''五香朗姆酒(非常深,带有玫瑰色的底色)','榛子(最深的带有玫瑰色的底色)','可可(最深的带有中性底色)','提拉米苏(最深的带有金色底色)','Sable(浓郁的 w / 玫瑰色底色)','松露(丰富的带有金色底色)','Ganache(最丰富的带有中性底色)','','','','','','','',' ', '', '', '', ''五香朗姆酒(非常深,带有玫瑰色的底色)','榛子(最深的带有玫瑰色的底色)','可可(最深的带有中性底色)','提拉米苏(最深的带有金色底色)','Sable(浓郁的 w / 玫瑰色底色)','松露(丰富的带有金色底色)','Ganache(最丰富的带有中性底色)','','','','','','','',' ', '', '', '', ''', '', '', '', '', '', '', '', '', '', ''', '', '', '', '', '', '', '', '', '', ''
解决方案
在您的time.sleep(10)
行之后,我添加了以下代码部分。对我来说它正在工作。请你也试试。
代码
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])
对我来说,结果是这样的:
['云','天鹅','雪','象牙','珍珠','杏仁','贝壳','瓷器','香草','裸色','温暖','光','天然”、“金色”、“暖色”、“沙色”、“金色”、“果仁糖”、“暖色”、“蜂蜜”、“焦糖”、“布鲁利”、“摩卡”、“黄油”、“枫木” , '栗子', '柴', '桃花心木', '五香', '榛子', '可可', '提拉米苏', '黑貂', '松露', '甘纳许']
我看到有 36 种颜色,所以计数器结果也是正确的。