使用Pandas read_html爬取fbref表格存CSV遇报错求助
解决Pandas read_html爬取数据存CSV的问题
问题根源
pd.read_html()方法会返回页面中所有表格对应的DataFrame对象列表,而非单个DataFrame。直接对列表调用to_csv()会触发'list' object has no attribute 'to_csv'错误;若直接将整个列表转为DataFrame,会因嵌套结构不符合二维要求报错。
解决方案步骤
- 先确认爬取到的表格数量:通过
len(raw_data)查看列表长度,定位目标表格的索引 - 提取列表中的单个DataFrame对象
- 处理fbref表格常见的多层表头问题(避免CSV结构混乱)
- 保存为CSV文件
修正后的完整代码
import pandas as pd # 爬取页面所有表格,返回DataFrame列表 raw_data = pd.read_html('https://fbref.com/en/comps/Big5/Big-5-European-Leagues-Stats#big5_table') # 查看表格数量,确认目标表格索引(示例中目标为第一个表格,索引0) print(f"共获取 {len(raw_data)} 个表格") # 提取目标DataFrame df = raw_data[0] # 合并多层表头为单层,避免CSV存储异常 df.columns = ['_'.join(col).strip() for col in df.columns.values] # 保存为CSV,去除默认索引列 df.to_csv('Top_5.csv', index=False) print("数据已保存为 Top_5.csv") print(df.head())
关键说明
- fbref的赛事统计表格通常带有多层表头,合并后能让CSV文件的列名更清晰,避免出现空值或嵌套列名
- 若目标表格不是索引0的位置,可根据打印的表格数量调整索引值,比如
raw_data[1]
内容的提问来源于stack exchange,提问作者Dezzo
相关产品推荐
相关产品推荐

