如何从fbref.com通过ID提取隐藏表格?stats_gca提取失败求助
解决fbref.com中stats_gca表格提取失败的问题
问题原因
fbref网站里,stats_gca这类球员级数据表格默认处于折叠状态,页面源码中它被包裹在HTML注释(<!-- ... -->)里。BeautifulSoup默认不会解析注释内部的HTML结构,所以直接用soup.find('table', {'id': 'stats_gca'})会返回None,导致后续代码报错。而stats_squads_gca_for是球队级默认展开的表格,不在注释范围内,因此能正常提取。
解决方法
先从响应内容中提取包裹目标表格的注释块,再将注释内的内容作为HTML解析,之后就能正常定位到目标表格。
修改后的代码:
import requests import pandas as pd from bs4 import BeautifulSoup, Comment url = "https://fbref.com/it/comp/11/gca/Statistiche-di-Serie-A#all_stats_gca" response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') # 筛选包含stats_gca表格的注释块 comment = soup.find(string=lambda text: isinstance(text, Comment) and 'stats_gca' in text) # 解析注释中的HTML内容 comment_soup = BeautifulSoup(comment, 'html.parser') # 提取目标表格 table = comment_soup.find('table', {'id': 'stats_gca'}) df = pd.read_html(str(table))[0] print(df.head())
补充说明
- 利用
Comment类识别HTML注释,通过lambda函数精准筛选包含目标表格ID的注释内容 - 解析注释后,后续提取表格、转成DataFrame的操作和处理普通表格完全一致
- 该方法适用于fbref所有默认折叠的球员数据表格(比如
stats_shooting、stats_passing等)
内容的提问来源于stack exchange,提问作者Walrus
相关产品推荐
相关产品推荐

