Python属性错误。"NoneType对象没有属性finde_all",一个表没有,另一个表没有。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 你需要做另一个选择器来解析数据,因为它将以文本形式出现。
以上是关于Python属性错误。"NoneType对象没有属性finde_all",一个表没有,另一个表没有。的主要内容,如果未能解决你的问题,请参考以下文章
将列表转换为DataFrame时如何处理错误“'NoneType'对象没有属性'keys'”
Discord Bot - “属性错误:'NoneType' 对象没有属性'strip。'
为啥 pytest 在测试模型创建时会抛出“AttributeError:'NoneType'对象没有属性'_meta'”错误?
python"TypeError: 'NoneType' object is not iterable"错误解析
连接到 SQL 服务器时,Python pymssql 错误“TypeError:'NoneType' 类型的参数不可迭代”