Selenium爬取数据用Pandas写入CSV如何按指定列格式化输出
问题原因
你当前将所有提取到的属性值都追加到了一维列表中,Pandas将一维列表转换为DataFrame时默认会生成为单列结构,所以会出现所有数据在同一列/强行展平后全在一行的问题。
解决方案
只需要调整数据存储的结构为二维列表,每个option对应的三个属性作为单独的子列表(对应CSV的一行)存入总列表即可,不需要调用已弃用的append方法,修改后代码如下:
from selenium import webdriver import pandas as pd # 存储二维数据,每个元素对应CSV的一行 price = [] driver = webdriver.Chrome("./chromedriver") driver.get("https://www.example.co.jp/dp/zzzzzzzzzz/") select_box = driver.find_element_by_name("dropdown_selected_size_name") options = [x for x in select_box.find_elements_by_tag_name("option")] for element in options: # 每次追加一行的三个字段,组成子列表 price.append([ element.get_attribute("value"), element.get_attribute("class"), element.get_attribute("data-a-html-content") ]) # 构造DataFrame时指定列名,按你的需求设置col2-col4 output = pd.DataFrame(price, columns=['col2', 'col3', 'col4']) # 插入行号作为col1列 output.insert(loc=0, column='col1', value=range(len(output))) # 导出时关闭默认索引输出,避免多出生成的索引列 output.to_csv("Data.csv", encoding='utf-8-sig', index=False) driver.close()
导出的CSV就会完全符合你要求的四列结构,每行对应一个option的信息。
内容的提问来源于stack exchange,提问作者crawf
相关产品推荐
相关产品推荐

