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

为何Pandas无法爬取第二个表格?相同逻辑仅获取第一个表格结果

解决fbref表格爬取第二个表格为空的问题

导致第二个表格爬取后为空的原因主要有两个,对应解决方案如下:

1. 未设置请求头导致内容缺失

fbref会校验请求的User-Agent,默认的requests请求标识会被识别为爬虫,导致服务器返回的页面内容不完整,第二个表格的数据可能被隐藏。需要添加模拟浏览器的请求头。

2. 复合表头未正确解析

第二个表格stats_keeper采用双层表头结构,pd.read_html默认仅读取第一行作为表头,导致后续数据被错误解析,最终呈现为空。需要指定header=[0,1]参数让pandas正确识别双层表头。

修改后的完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = "https://fbref.com/en/comps/9/keepers/Premier-League-Stats"

# 模拟浏览器请求头,避免被反爬拦截
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.content, 'html.parser')

# 爬取第一个表格(无需特殊处理)
table1 = soup.find('table', attrs={'id': 'stats_squads_keeper_for'})
df1 = pd.read_html(str(table1))[0]

# 爬取第二个表格,指定header处理双层表头
table2 = soup.find('table', attrs={'id': 'stats_keeper'})
df2 = pd.read_html(str(table2), header=[0, 1])[0]

print(df1)
print(df2)

注:代码中用find替代find_all()[0],逻辑更简洁,效果一致。

内容的提问来源于stack exchange,提问作者Miguel Angel Acosta Chinchilla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:53:17