我正在尝试网络刮NFL的排名数据,并有兴趣的类别"PCT“和"Net Pts”从这个网址的表格。https://www.nfl.com/standings/league/2021/REG我已经设置了BeautifulSoup,并打印了本页中所有的'td‘。问题是,当你这样做的时候,你会得到一个从最差记录到最好记录的球队顺序。显然,如果我有一个特定的索引,例如,当他们的记录发生变化时,数据将具有不同的索引,那么这将在未来导致问题。事实上,随着比赛的增多,网站上球队的顺序每周都会发生变化。
有没有办法这样说,如果团队的名字是X做某事?比如使用表数据降低4个索引?我在任何youtube教程或书中都没有看到如何处理这个问题,所以我想知道这个问题的思考过程是什么。我需要一种方法来确定每个团队和他们的PCT和网点的瞬间,因为这个信息将被放入另一个函数。
下面是我到目前为止的例子:当你做这样的事情时…
import requests
from bs4 import BeautifulSoup
url = 'https://www.nfl.com/standings/league/2021/REG'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')
data = soup.find_all('td')[0:10]
print(data)
#I am using just the first 10 indexes to keep it short here
...you获取底特律狮子队的表格数据信息,因为他们是联盟中最差的球队,在发布这个问题的时候。我已经确定他们的"PCT“数据点应该是
win_pct = soup.find_all('td')[4]
print(float(win_pct.text.strip()))
然而,如果另一支球队成为联盟中最差的球队,这个指数将属于他们,而不是狮子队。我该如何解决这个问题呢?谢谢
发布于 2021-10-20 16:39:04
您可以使用字典来存储俱乐部的数据,然后使用俱乐部名称作为关键字来获取数据(独立于俱乐部位置)。例如:
import requests
from bs4 import BeautifulSoup
url = "https://www.nfl.com/standings/league/2021/REG"
res = requests.get(url)
soup = BeautifulSoup(res.text, "lxml")
data = {}
for row in soup.select("tr:has(td)"):
cells = [td.get_text(strip=True) for td in row.select("td")[1:]]
club_name = row.select_one(".d3-o-club-fullname").get_text(strip=True)
data[club_name] = cells
# print PCT/Net Pts of Detroit Lions:
print(data["Detroit Lions"][3], data["Detroit Lions"][6])
打印:
0.000 -63
https://stackoverflow.com/questions/69652665
复制