如何使用pandas获取网站全部表格 解决fbref站点第三张表格缺失问题
问题根因
fbref站点的球员维度表格默认包裹在HTML注释<!-- -->中,不会直接作为DOM节点加载,因此pandas的read_html、常规BeautifulSoup节点遍历都无法直接识别到该表格,同类页面的非首屏表格均采用了同样的懒加载逻辑,因此普遍只能抓取到前两个球队维度的表格。
解决步骤
- 先请求获取完整页面源码,单独提取页面内所有HTML注释内容
- 从注释中匹配到对应球员表格的HTML片段
- 单独解析该表格片段即可拿到目标数据
示例代码
import requests from bs4 import BeautifulSoup, Comment import pandas as pd url = "https://fbref.com/en/comps/9/keepersadv/Premier-League-Stats" # 增加合法UA避免站点拦截请求 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"} resp = requests.get(url, headers=headers) soup = BeautifulSoup(resp.text, "html.parser") # 提取页面所有注释内容 comments = soup.find_all(string=lambda text: isinstance(text, Comment)) # 匹配球员进阶守门数据表格,对应id为stats_keeper_adv player_table = None for cm in comments: if 'id="stats_keeper_adv"' in cm: player_table = cm break if player_table: # 解析提取到的表格片段 df_player_keeper_adv = pd.read_html(player_table, header=1)[0] print(df_player_keeper_adv)
同类页面只需要替换上述代码中匹配的表格id,即可抓取到对应隐藏的球员维度表格。
内容的提问来源于stack exchange,提问作者ancalleja
相关产品推荐
相关产品推荐

