Python网页爬取异常:无法将Home Depot数据写入列表或DataFrame
问题解决:Home Depot数据爬取无法写入列表/DataFrame
你的代码核心问题是重复查找元素,导致无法获取有效文本内容,进而列表为空。具体问题和修复方案如下:
问题分析
skus = driver.find_elements_by_class_name('product-identifier--bd1f5')已经获取到所有SKU元素的列表,每个sku本身就是目标class的元素- 循环里又执行
sku.find_element_by_class_name('product-identifier--bd1f5'),相当于在当前SKU元素内部查找同名子元素,而实际上不存在这样的子元素,所以获取的text为空,无法追加到列表 - 价格部分的问题完全一致
修复后的代码
from selenium import webdriver import pandas as pd website = 'https://www.homedepot.com/b/Milwaukee/Special-Values/N-5yc1vZ7Zzv' path = '/Users/Office/Documents/chromedriver.exe' driver = webdriver.Chrome(path) driver.get(website) skus = driver.find_elements_by_class_name('product-identifier--bd1f5') prices = driver.find_elements_by_class_name('price-format__main-price') prod_num = [] prod_price = [] # 直接获取已找到元素的文本,无需再次查找子元素 for sku in skus: prod_num.append(sku.text) for price in prices: prod_price.append(price.text) driver.quit() df = pd.DataFrame({'code': prod_num, 'price': prod_price}) df.to_csv('HD_test.csv', index=False) print(df)
额外优化建议
- 建议添加显式等待,避免页面未加载完成就执行元素查找(比如用
WebDriverWait配合expected_conditions),防止因加载延迟导致获取不到元素 - 检查SKU和价格的数量是否匹配,避免DataFrame因长度不一致报错
内容的提问来源于stack exchange,提问作者ryan houghton
相关产品推荐
相关产品推荐

