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

使用BeautifulSoup解析FBref页面时无法获取第二个目标表格的问题

解决方法:获取页面第二个表格的正确姿势

你的问题出在对BeautifulSoup的find()方法理解有误,咱们一步步拆解问题并修复:

为什么你的代码没返回内容?

find()方法只会返回第一个匹配到的元素,它返回的是单个Tag对象,不是列表。你后面加的[1]并不是在取第二个表格,而是试图获取这个第一个表格下的第2个子元素(按标签顺序),这显然不是你想要的,所以自然返回空内容。

另外,类名里重复的min_width虽然不影响匹配,但用CSS选择器来匹配多类元素会更稳定。

修正后的代码方案

方案1:用find_all()获取所有匹配表格

find_all()会返回所有符合条件的元素列表,之后你就可以通过索引[1]拿到第二个表格:

from bs4 import BeautifulSoup
import requests

# 可选:添加请求头避免反爬(如果之后遇到403错误)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
source = requests.get('https://fbref.com/en/comps/9/gca/Premier-League-Stats', headers=headers).text
soup = BeautifulSoup(source, 'lxml')

# 获取所有符合类名的表格
stattables = soup.find_all('table', class_='min_width sortable stats_table min_width shade_zero')

# 检查是否存在第二个表格,再输出
if len(stattables) >= 2:
    stattable = stattables[1]
    print(stattable)
else:
    print("未找到第二个目标表格")

方案2:用CSS选择器(更推荐)

CSS选择器对多类元素的匹配逻辑更清晰,避免类名顺序或重复带来的潜在问题:

from bs4 import BeautifulSoup
import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
source = requests.get('https://fbref.com/en/comps/9/gca/Premier-League-Stats', headers=headers).text
soup = BeautifulSoup(source, 'lxml')

# 用CSS选择器匹配同时拥有这些类的表格
stattables = soup.select('table.min_width.sortable.stats_table.shade_zero')

if len(stattables) >= 2:
    stattable = stattables[1]
    print(stattable)
else:
    print("未找到第二个目标表格")

额外提示

  • 加请求头是为了模拟浏览器请求,避免网站的反爬机制拦截你的请求(当前你可能没遇到,但加上更稳妥)。
  • 如果之后需要提取表格里的具体数据,可以进一步遍历stattable里的<tr>和<td>标签来获取内容。

内容的提问来源于stack exchange,提问作者Sushant Jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:12:30