You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pd.read_html提取维基百科多表格数据并导出CSV的问题

问题解决:提取维基百科17th Lok Sabha所有表格并导出CSV

问题背景

需要从指定维基百科页面提取所有表格数据,转为Pandas DataFrame并导出为CSV。当前仅能提取第一个表格,尝试合并所有表格时出现VisibleDeprecationWarning警告,输出格式异常,单独处理每个表格效率低下。

错误原因

原代码中,将所有BeautifulSoup提取的表格转为字符串列表后,用pd.read_html得到的是多个DataFrame组成的列表,直接将这个列表传入pd.DataFrame()会把每个DataFrame当作单个元素存入一行,由于各DataFrame的行数/列数不一致,导致生成“不规则嵌套序列”,触发警告且输出格式混乱。

解决方案

方法一:直接用pd.read_html读取目标页面(最简洁高效)

pd.read_html支持直接传入URL,并通过attrs参数筛选目标表格,无需额外使用BeautifulSoup处理页面:

import pandas as pd

# 直接读取页面中所有符合class的表格,返回DataFrame列表
wiki_url = 'https://en.wikipedia.org/wiki/List_of_members_of_the_17th_Lok_Sabha'
dfs = pd.read_html(wiki_url, attrs={'class': 'wikitable sortable'})

# 合并所有结构一致的DataFrame
combined_df = pd.concat(dfs, ignore_index=True)

# 导出为CSV
combined_df.to_csv('India 17th Lok Sabha.csv', index=False)

方法二:配合BeautifulSoup逐个处理表格(适合复杂页面筛选)

如果需要用BeautifulSoup做更精细的表格筛选,需逐个读取每个表格的HTML字符串,转为DataFrame后合并:

import pandas as pd
import requests
from bs4 import BeautifulSoup

wiki_url = 'https://en.wikipedia.org/wiki/List_of_members_of_the_17th_Lok_Sabha'
page = requests.get(wiki_url)
soup = BeautifulSoup(page.text, 'html.parser')
tables = soup.find_all('table', {'class': 'wikitable sortable'})

# 逐个处理每个表格,生成DataFrame列表
dfs = []
for table in tables:
    # 读取单个表格的HTML字符串,得到包含一个DataFrame的列表,取第一个元素
    df = pd.read_html(str(table))[0]
    dfs.append(df)

# 合并所有DataFrame
combined_df = pd.concat(dfs, ignore_index=True)

# 导出CSV
combined_df.to_csv('India 17th Lok Sabha.csv', index=False)

关键说明

  • pd.concat(dfs, ignore_index=True):将所有结构一致的DataFrame按行合并,ignore_index=True重置合并后的索引,避免索引重复。
  • 如果部分表格列名/结构不一致,可先检查每个DataFrame的列,对列名做统一处理后再合并(比如重命名列、补充缺失列等)。

内容的提问来源于stack exchange,提问作者edgestorm517

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:30:48