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

使用BeautifulSoup爬取Fangraphs比赛日志表格遇AttributeError求助

爬取Fangraphs球员比赛日志触发AttributeError的成因分析

问题场景

我已成功用Python的BeautifulSoup爬取Fangraphs的击球手排行榜表格(存入DataFrame wRC1),但爬取Trevor Rogers的比赛日志表格时,运行修改后的代码触发错误:

AttributeError: 'NoneType' object has no attribute 'find'

核心成因

这个错误的直接原因是代码中soup.find("table", {"class": "rgMasterTable"})返回了None——也就是找不到指定类名的表格,后续调用table.find("thead")自然会报错。具体导致找不到表格的原因有两个:

1. 表格类名不匹配

击球手排行榜页面的表格使用rgMasterTable类名,但球员比赛日志页面的表格采用了不同的类名(比如实际是table table-striped table-bordered table-condensed这类组合类名)。原代码的选择器只针对排行榜页面的表格,不适用于比赛日志页面。

2. 网站反爬拦截

Fangraphs会对无请求头的爬虫请求做拦截,直接用requests.get()返回的HTML可能是反爬提示页面,而非包含比赛日志的正常页面,自然找不到目标表格。

额外冗余代码问题

函数中重复对PITCHERS_URL赋值的代码(前两行赋值后又被URL_1覆盖)属于冗余代码,虽然不直接导致错误,但会降低代码可读性,建议清理。

验证与修复方向

  • 检查返回内容:在requests.get()后打印pitchers_html,确认返回的是正常页面还是反爬提示。如果是反爬,添加请求头模拟浏览器:
    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"
    }
    pitchers_html = requests.get(PITCHERS_URL, headers=headers).text
    
  • 修正表格选择器:打开浏览器开发者工具,查看比赛日志表格的实际类名或其他标识,替换代码中的表格查找逻辑,比如:
    table = soup.find("table", {"class": "table table-striped table-bordered table-condensed"})
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:01:07