将HTML输出转为表格遇阻:网页爬取后无法生成CSV表格
解决爬取表格数据并导出为CSV的方法
问题分析
原代码的自定义HTMLParser逻辑存在错误,handle_starttag里调用handle_data()未传参数,且未精准定位表格的行、单元格元素,导致仅捕获到无关元数据。另外该页面表格为动态渲染,需等待加载完成后再提取数据。
改进后的代码
直接通过Selenium定位表格元素,提取行与单元格数据,再用Pandas转换为DataFrame并导出为CSV:
import pandas as pd from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC url = "https://flo.uri.sh/visualisation/15396850/embed?auto=1" # 初始化Chrome浏览器 driver = webdriver.Chrome() driver.get(url) try: # 等待表格加载完成,最长等待10秒 table = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, "table")) ) # 提取表头文本 headers = [th.text.strip() for th in table.find_elements(By.TAG_NAME, "th")] # 提取表格行数据,跳过表头行 rows = [] for tr in table.find_elements(By.TAG_NAME, "tr")[1:]: cells = [td.text.strip() for td in tr.find_elements(By.TAG_NAME, "td")] if cells: # 过滤空行 rows.append(cells) # 转换为DataFrame并导出为CSV df = pd.DataFrame(rows, columns=headers) df.to_csv("table_data.csv", index=False, encoding="utf-8-sig") print("表格数据已成功导出到table_data.csv") finally: # 关闭浏览器 driver.quit()
代码说明
- 用
WebDriverWait等待表格元素加载,避免页面未渲染完成导致的元素查找失败问题。 - 通过
table、th、tr、td标签定位,精准提取表头与每行数据。 - 借助Pandas将数据转为DataFrame,直接导出为CSV文件,无需手动处理格式。
内容的提问来源于stack exchange,提问作者buttman007
相关产品推荐
相关产品推荐

