在Google Colab中无法抓取Fbref.com第2个表格,请求技术排查
解决fbref页面第二个表格无法用pd.read_html抓取的问题
问题描述
在Google Colab中使用pd.read_html("https://fbref.com/en/comps/82/stats/Indian-Super-League-Stats#all_stats_standard")时,只能获取页面的第一个表格,无法抓取目标的第二个表格(对应截图中的球员数据表格)。
问题原因
- fbref网站的部分表格(比如带
#all_前缀锚点的表格)默认是前端隐藏状态,服务器返回的初始HTML中并没有包含这些表格的完整数据,需要通过JavaScript动态加载或触发显示后才会渲染出来。 pd.read_html仅能解析页面初始HTML里的静态表格,无法处理JavaScript动态生成的内容,因此默认只能抓取到第一个可见的静态表格。
解决方案
方案1:结合requests+BeautifulSoup提取目标表格
通过请求页面HTML,直接定位到目标隐藏表格的HTML代码,再用pd.read_html解析:
- 安装依赖(Colab中执行):
!pip install requests beautifulsoup4 pandas - 代码示例:
import requests from bs4 import BeautifulSoup import pandas as pd url = "https://fbref.com/en/comps/82/stats/Indian-Super-League-Stats#all_stats_standard" # 模拟浏览器请求,避免被网站反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 直接通过表格id定位目标表格(隐藏表格的id是all_stats_standard) target_table = soup.find('table', id='all_stats_standard') if target_table: df = pd.read_html(str(target_table))[0] # 查看前5行数据 print(df.head()) else: print("未找到目标表格,请检查表格id是否正确")
方案2:使用Selenium模拟浏览器加载动态内容
如果页面动态渲染逻辑更复杂,可通过Selenium模拟完整浏览器加载过程,确保所有表格都被渲染:
- 安装依赖(Colab中执行):
!pip install selenium pandas webdriver-manager - 代码示例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import pandas as pd from webdriver_manager.chrome import ChromeDriverManager # 配置Colab无头浏览器(无界面运行) chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') # 初始化浏览器并加载页面 driver = webdriver.Chrome(ChromeDriverManager().install(), options=chrome_options) driver.get("https://fbref.com/en/comps/82/stats/Indian-Super-League-Stats#all_stats_standard") # 读取页面中所有已渲染的表格 tables = pd.read_html(driver.page_source) # 目标表格为第二个,取索引1(索引从0开始) print(tables[1].head()) # 关闭浏览器 driver.quit()
内容的提问来源于stack exchange,提问作者Footilytics - Indian football
相关产品推荐
相关产品推荐

