爬取网页多表格存为CSV仅最后一个DataFrame被保存如何解决
问题原因
你当前代码的核心问题是to_csv默认使用覆盖写入模式,每次循环都会清空之前的table.csv内容再写入当前表格数据,最终自然仅保留最后一次循环的表格内容。
解决方案1:先合并所有表格再统一写入(推荐,适用于所有目标表格列结构一致的场景)
先把所有表格转为DataFrame后合并为一个整体,再一次性写入CSV文件,避免重复IO操作:
import time from selenium import webdriver import pandas as pd base_url = 'https://uk.insight.com/en_GB/shop/product/2W1F2EA%23ABU/HEWLETT-PACKARD-(HP-INC)/2W1F2EA%23ABU/HP-ProBook-440-G8--14"--Core-i7-1165G7--16-GB-RAM--1-TB-SSD--UK/' print('Opening Chrome Browser Automatically in 5 secs') time.sleep(5) options = webdriver.ChromeOptions() options.add_experimental_option("detach", True) driver = webdriver.Chrome(options=options) driver.get(base_url) df_list = pd.read_html(driver.page_source) target_tables = df_list[4:] # 合并所有目标表格 all_df = pd.concat([pd.DataFrame(table) for table in target_tables], ignore_index=True) # 一次性写入CSV all_df.to_csv('table.csv', index=False)
解决方案2:循环追加写入(适用于不需要合并、仅按顺序拼接所有表格内容的场景)
修改to_csv的写入模式为追加,仅第一次写入保留表头避免重复:
# 前面的代码和原代码保持一致,仅修改循环部分即可 df2 = df[4:] for idx, table in enumerate(df2): df = pd.DataFrame(table) # idx==0判断仅第一个表格写入表头,后续追加不重复写表头 df.to_csv('table.csv', index=False, mode='a', header=idx==0)
注意:如果不同表格的列结构不一致,使用合并方案时会自动补全空值到对应列,追加方案则会直接按行拼接,可能出现列错位的问题,你可以根据自己的表格结构选择合适的方案。
内容的提问来源于stack exchange,提问作者Mandar Raut
相关产品推荐
相关产品推荐

