我正在开发一个屏幕抓取工具,以从www.pro-football-reference.com中提取足球统计数据。我目前正在从主要玩家的统计数据页面中进行抓取,然后深入到他们的个人页面,其中包含按年份统计的数据。
我能够与我的第一批球员(四分卫,使用传球台)成功地实施这个过程。但是,当我尝试重新创建进程以获取运行数据时,我在数据框中收到了一个附加列,其值为“未命名:x_level_0”。这是我第一次使用 HTML 数据,所以我不确定我错过了哪一部分,我只是假设它与四分卫的代码相同。
以下是 QB 代码示例和正确的数据框:
import requests
import urllib.request
import time
from bs4 import BeautifulSoup
import pandas as pd
from pandas import DataFrame
import lxml
import re
import csv
p = 1
url = 'https://www.pro-football-reference.com'
year = 2020
maxp = 300
#Passing Data
r = requests.get(url+ '/years/' + str(year) + '/passing.htm')
soup = BeautifulSoup(r.content, 'html.parser')
parsed_table = soup.find_all('table')[0]
results = soup.find(id='div_passing')
job_elems = results.find_all('tr')
df = []
LastNameList = []
FirstNameList = []
for i,row in enumerate(parsed_table.find_all('tr')[2:]):
dat = row.find('td', attrs={'data-stat': 'player'})
if dat != None:
name = dat.a.get_text()
print(name)
stub = dat.a.get('href')
#pos = row.find('td', attrs={'data-stat': 'fantasy_pos'}).get_text()
#print(pos)
# grab this players stats
tdf = pd.read_html(url + stub)[1]
for k,v in tdf.iterrows():
#Scrape 2020 stats, if no 2020 stats move on
try:
FindYear=re.search(".*2020.*",v['Year'])
if FindYear:
#If Year for stats is current year append data to dataframe
提取此数据的示例 URL 为: https: //www.pro-football-reference.com/players/J/JacoJo01.htm
它正在拉动冲刺和接收。在解析 HTML 时,我还需要注意什么吗?
我尝试将 index_col = 1 添加到我的 tdf = pd.read_html(url + Stub)[1] 中。然而,这只是将两个值分组到一列中。
对此的任何意见将不胜感激。如果我可以提供任何进一步的信息,请告诉我。
相关分类