You need to enable JavaScript to run this app. 使用BeautifulSoup爬取FBref表格时无法识别指定id的table元素,返回结果为0
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup爬取FBref表格时无法识别指定id的table元素,返回结果为0

定位匹配结果为0的核心原因
  • 裸请求被反爬拦截:不带浏览器标识的默认requests请求,会被FBref的防护机制返回无业务内容的拦截页面,自然无法匹配到目标表格元素。
  • 目标表格存储形式特殊:你尝试定位的id="stats_standard"标准球员统计表格,没有放置在页面可直接遍历的顶层DOM中,而是被包裹在HTML注释节点(<!-- -->)内部,常规的find_all扫描无法触达这类注释内嵌的内容。
可落地的修复方案
  • 为请求配置合规的浏览器请求头,绕过基础反爬校验,获取真实的页面HTML
  • 遍历页面内所有HTML注释节点,提取注释中包裹的HTML片段
  • 在提取的注释片段中解析定位目标表格
修正后的可运行代码
# 导入必要依赖
from bs4 import BeautifulSoup, Comment
import requests
import pandas as pd

# 配置模拟真实浏览器的请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
url = "https://fbref.com/en/comps/9/stats/Premier-League-Stats"

# 发送带请求头的GET请求获取页面内容
html_content = requests.get(url, headers=headers).text
soup = BeautifulSoup(html_content, "lxml")

# 提取页面内所有HTML注释节点
all_comments = soup.find_all(string=lambda text: isinstance(text, Comment))
target_table = None
for comment in all_comments:
    comment_soup = BeautifulSoup(comment, "lxml")
    # 匹配指定id的目标表格
    table = comment_soup.find("table", attrs={"id": "stats_standard"})
    if table:
        target_table = table
        break

print("Number of tables on site: ", 1 if target_table else 0)

提示:FBref对所有大尺寸联赛统计表格统一采用注释包裹的前端实现逻辑,这是网站的专属开发方案,不是你使用的class、id定位语法存在错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 16:54:00