Python属性错误。"NoneType对象没有属性finde_all",一个表没有,另一个表没有。

我正试图从以下网站上搜索MLB数据 https:/www.baseball-reference.comleaguesMLB2019.shtml. 在页面上有几个数据表,特别是我对击球和投球统计感兴趣。我可以成功地从打击表中提取数据并将其放入一个数据框中,但是当我试图从投球表中提取数据时,错误就出现了,尽管格式基本相同。

from bs4 import BeautifulSoup
import pandas as pd
import time
import requests

for 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_stats


def 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

我希望这不只是我的一个小错别字,我忽略了,这将是非常令人沮丧的。

先谢谢大家的帮助。

EDIT: 感谢Dainius,我找到了一个解决方案!我并没有完全按照他们提供的链接中的建议去做,但它帮助我意识到由于某种原因,投球表在HTML中被注释了,这在检查网页时并不明显,所以我被Dainius的回复搞糊涂了。

检查结果显示

直到我真正打印 “汤 “的时候才意识到,终于明白了他们的意思。在快速搜索如何从HTML中提取注释后,解决方案只是添加两行代码。

comments = soup.find_all(text=lambda text: isinstance(text, Comment))
pitching_html = comments[19]
pitching_table = BeautifulSoup(pitching_html, 'lxml')

解决方案:

因为我可以看到 div_teams_standard_pitching id在注释中。你需要解析源代码的文本来检索你需要的部分。因为你使用了 BeautifulSoup 我想这个解决方案应该会有帮助。

P.S 你需要做另一个选择器来解析数据,因为它将以文本形式出现。

解决办法

给TA打赏
共{{data.count}}人
人已打赏
解决方案

im developing an admin panel where the admin can see all the bookings that have been requested and select those who he will accept; and I want to display those 'accepted' bookings in a different tab (...

2022-4-22 3:00:08

解决方案

在过滤器中使用str_detect和&的短手。

2022-4-22 3:00:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索