为了账号安全,请及时绑定邮箱和手机立即绑定

Python 属性错误:一个表的“NoneType 对象没有属性 find_all”,但另一个表没有

Python 属性错误:一个表的“NoneType 对象没有属性 find_all”,但另一个表没有

慕神8447489 2022-10-18 17:57:48
我正在尝试从https://www.baseball-reference.com/leagues/MLB/2019.shtml抓取 MLB 数据。在页面上有几个数据表,特别是我对击球和投球统计感兴趣。我可以成功地从击球台中提取数据并将其放入数据框中,但是当我尝试从投球台中提取数据时出现错误,即使格式基本相同:from bs4 import BeautifulSoupimport pandas as pdimport timeimport requestsfor year in range(2018, 2020):   url = "https://www.baseball-reference.com/leagues/MLB/{}.shtml".format(year)   headers = {'user-agent': "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"}   page = requests.get(url, headers=headers)   soup = BeautifulSoup(page.text, 'html.parser')   batting_table = soup.find("div", attrs={"id": "div_teams_standard_batting"})   pitching_table = soup.find("div", attrs={"id": "div_teams_standard_pitching"})我 100% 确定 HTML 引用是正确的。batting_table 很好,但 pitching_table 是“NoneType”。我知道有些问题可能是由于 html 页面本身的结构造成的,但在这种情况下可能吗?不确定这是否有用,但我在这些函数中使用这些表,我将要从每个团队中提取的特定统计数据传递给这些表,然后将其放入列表中。这是我使用“find_all”并出现错误的地方:def batting_stats(bstat):    tables = batting_table.find_all("td", attrs={"data-stat": bstat})    b_stats = []    for table in tables:        b_stat = table.text        b_stat = float(b_stat)        b_stats.append(b_stat)        b_stats = b_stats[:-2] #exclude total and average    return b_statsdef pitching_stats(pstat):    tables = pitching_table.find_all("td", attrs={"data-stat": pstat})    p_stats = []    for table in tables:       p_stat = table.text       p_stat = float(p_stat)       p_stats.append(p_stat)    p_stats = p_stats[:-2]    return p_stats我希望这不仅仅是我忽略的一个小错字,那将是非常令人沮丧的。谢谢大家的帮助,提前。编辑:所以感谢Dainius,我能够找到解决方案!我没有完全按照他们提供的链接中的建议做,但它帮助我意识到由于某种原因,投球台在 HTML 中被评论,这在检查网页时并不明显,所以我对 Dainius 的回复感到困惑.检查显示什么直到我真正打印了“汤”并最终看到它们的意思时,我才意识到。在快速搜索如何从 HTML 中提取注释之后,解决方案只是添加了两行代码:comments = soup.find_all(text=lambda text: isinstance(text, Comment))pitching_html = comments[19]pitching_table = BeautifulSoup(pitching_html, 'lxml')
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

正如我所看到的,div_teams_standard_pitchingid 在评论中。您需要解析源代码的文本以检索您需要的部分。因为你使用BeautifulSoup我认为这个解决方案应该有所帮助。

PS您将需要制作另一个选择器来解析数据,因为它将以文本形式出现。

解决方案


查看完整回答
反对 回复 2022-10-18
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信