Python Selenium爬取速卖通商品:合并拆分价格并生成字典
解决Selenium爬速卖通商品时的价格合并与元素转字符串问题
核心思路
先定位每个商品的父容器,再在单个容器内提取所有字段,彻底避免不同商品的价格元素错位。WebElement转普通字符串直接调用.text属性即可。
具体实现步骤
定位所有商品容器
先找到页面中所有商品的外层节点(速卖通商品卡片通常是带特定类名的div标签,需根据实际页面调整选择器),确保后续提取的字段都属于同一个商品:from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("你的速卖通乐高商品页URL") # 定位所有商品容器,示例选择器需根据实际页面修改 product_items = driver.find_elements(By.CSS_SELECTOR, "div.product-item")遍历容器提取字段并合并价格
对每个商品容器,分别提取各字段,拼接拆分的价格部分:product_list = [] for item in product_items[:60]: # 仅处理前60个商品 # 提取商品名称 name = item.find_element(By.CSS_SELECTOR, "a.product-title").text.strip() # 提取价格各部分并合并(选择器需匹配页面实际元素) try: price_symbol = item.find_element(By.CSS_SELECTOR, "span.money-symbol").text price_integer = item.find_element(By.CSS_SELECTOR, "span.money-integer").text price_dot = item.find_element(By.CSS_SELECTOR, "span.money-dot").text price_decimal = item.find_element(By.CSS_SELECTOR, "span.money-decimal").text full_price = f"{price_symbol}{price_integer}{price_dot}{price_decimal}" except: full_price = "价格获取失败" # 处理元素缺失的异常 # 提取运费 try: shipping = item.find_element(By.CSS_SELECTOR, "div.shipping-info").text.strip() except: shipping = "运费信息缺失" # 提取销量 try: sales = item.find_element(By.CSS_SELECTOR, "div.sold-count").text.strip() except: sales = "销量信息缺失" # 生成商品字典并加入列表 product_dict = { "商品名称": name, "价格": full_price, "运费": shipping, "销量": sales } product_list.append(product_dict)写入文本文件
将收集到的商品信息写入文件(用JSON格式更易读):import json with open("速卖通乐高商品信息.txt", "w", encoding="utf-8") as f: json.dump(product_list, f, ensure_ascii=False, indent=2)
关键注意点
- WebElement转字符串:直接调用元素的
.text属性,就能获取元素显示的文本内容,返回结果就是普通字符串。 - 避免元素错位:绝对不要单独提取所有价格符号、所有整数部分再循环拼接——这种方式极易因页面元素加载顺序或缺失导致字段对应错误,必须基于单个商品容器提取子元素。
- 异常处理:加入
try-except能避免某个商品字段缺失导致整个爬取中断,保证尽可能多地获取有效数据。
内容的提问来源于stack exchange,提问作者Lahearle
相关产品推荐
相关产品推荐

