如何使用pandas将爬虫获取的多属性商品数据正确写入CSV文件
电商非固定属性商品爬虫数据导出CSV实现方案
核心思路
由于不同商品的属性数量不固定,需要先为单个商品初始化专属字典,将抓取到的所有属性都存入该字典,待该商品全部参数抓取完成后,再把完整的商品字典存入总列表。最终用pandas导出时会自动对齐所有出现过的属性作为CSV列,缺失的属性值自动填充为NaN,不会出现字段错位问题。
可直接复用的实现代码
from selenium import webdriver from bs4 import BeautifulSoup import pandas as pd # 初始化全局商品存储列表,所有完整的商品字典都会存入这里 all_products = [] # 替换为你自己的商品详情页链接列表 product_urls = ["https://xxx.com/product/1", "https://xxx.com/product/2"] # 初始化Selenium驱动(可替换为你自己的驱动配置) driver = webdriver.Chrome() for url in product_urls: # 每个商品单独初始化一个空字典,存储该商品所有属性 current_product = {} # 页面加载逻辑可替换为你自己的实现 driver.get(url) soup = BeautifulSoup(driver.page_source, "lxml") # 假设商品参数项的选择器为.param-item,参数名class为.param-key,参数值class为.param-value # 选择器可替换为你抓取的站点实际结构 param_list = soup.select(".param-item") for param in param_list: key = param.select_one(".param-key").get_text(strip=True) value = param.select_one(".param-value").get_text(strip=True) # 直接将属性写入当前商品的字典,无需单独存单键字典 current_product[key] = value # 可自定义添加固定通用字段 current_product["商品名称"] = soup.select_one(".product-title").get_text(strip=True) current_product["详情页链接"] = url # 当前商品所有属性抓取完成后,再加入总列表 all_products.append(current_product) # 统一导出CSV,pandas自动对齐所有属性列 df = pd.DataFrame(all_products) # 编码用utf-8-sig兼容Windows系统Excel打开不乱码 df.to_csv("电商商品数据.csv", index=False, encoding="utf-8-sig") driver.quit()
场景适配调整方案
- 遇到重复属性名需要避免覆盖的,写入属性前加判断:
if key not in current_product:再执行赋值操作 - 需要固定前序列顺序的,导出前调整df列顺序即可,示例:
df = df[["商品名称", "详情页链接", "重量", "长度"] + [col for col in df.columns if col not in ["商品名称", "详情页链接", "重量", "长度"]]] - 部分空值需要替换为自定义内容的,导出前执行
df = df.fillna("无")即可把所有NaN替换为“无”
内容的提问来源于stack exchange,提问作者Коля Нарушев
相关产品推荐
相关产品推荐

