【发布时间】:2021-11-15 22:46:43
【问题描述】:
因此,我使用此代码的目的是提取有关我的 NFL 球队新秀的信息。我想将他的表现与上赛季在他的位置上排名前 10 位的球员进行比较,当时他们在第一个赛季打了超过 10 场比赛。
为此,我参考了 Towards Data Science 中的一篇文章,他们解释了如何抓取 NFL 数据。
这是我的代码:
#url page
url_mac = 'https://www.pro-football-reference.com/years/2021/passing.htm'
#opening URL with BS
html_mac = urlopen(url_mac)
stats_macpage = BeautifulSoup(html_mac)
#collecting table rows
column_headers = stats_macpage.findAll('tr')[0]
column_headers = [i.getText() for i in column_headers.findAll('th')]
#getting stats of each row
rows = stats_macpage.findAll('tr')[1:]
qb_stats = []
for i in range(len(rows)):
qb_stats.append([col.getText() for col in rows[i].findAll('td')])
#creating a data frame
data = pd.DataFrame(qb_stats, columns = column_headers[1:])
#rename column of sack yards from yards to y_sack
new_columns = data.columns.values
new_columns[-6] = 'y_sack'
data.columns = new_columns
#selecting specifics stats
categories = ['Cmp%', 'Yds', 'TD', 'Int', 'Y/A', 'Rate']
#first filter
data_radar = data[['Player', 'Tm'] + categories]
#selecting specific player
data_mac = data_radar[data_radar['Player'] == 'Mac Jones']
我为所有 11 名我想要数据的球员做了这个,我在决赛中连接了,但你可以想象我的代码看起来有多糟糕。
如何改进它以创建循环?我已经尝试了一些东西,但是对于所有这些想法,要么效果不佳,要么超出了我的能力无法成功执行。
我的想法是获取过去 20 年的所有数据并逐年尝试查找,但这看起来有点不必要,因为我已经知道我想要什么年份。我的问题特别在这部分,因为在决赛中我可以创建一个列表,然后是一个“如果”,并且只需要我列表中每个玩家的第一年玩了超过 10 场比赛。
url_mac = 'https://www.pro-football-reference.com/years/2021/passing.htm'
谢谢大家。
【问题讨论】:
-
那么问题是什么?您想从
https://www.pro-football-reference.com/years/<YEAR>/passing.htm获取过去 10 年的表格并将它们连接到一个吗? -
没错,但我不知道具体年份如何。
-
原因不是过去 10 年。就像,汤姆布拉迪在 2000 年被选中,第一个他打了超过 10 场比赛的赛季是 2001 年。亚伦罗杰斯在 2005 年被选中,但在 2008 年只打了 10 多场比赛。所以我不能忍受过去 10 年
标签: python web-scraping beautifulsoup automation stat