【发布时间】:2020-02-24 09:18:59
【问题描述】:
我已经抓取了数据,但需要帮助才能正确解析它。我仍在学习,并会感谢我能得到的任何建议。
我正在寻找以下两个变量的数据:TEAM、SA/G
到目前为止,这是我的代码:
#import modules
from selenium import webdriver
from bs4 import BeautifulSoup
#set path for driver
driver = webdriver.Chrome('C:\webdrivers\chromedriver.exe')
# open page
driver.get('http://www.espn.com/nhl/statistics/team/_/stat/scoring/sort/avgGoals')
# driver.page_source
soup = BeautifulSoup(driver.page_source,'lxml')
#close driver
driver.close()
#grab table data
table = soup.find(class_='tablehead')
#parse data (extra data included)
for t in table:
td_tags = table.find_all('td')
# print(td_tags)
for td in td_tags:
a_tags = table.find('a')
print(td.text)
我已经抓取了正确的数据,但还有额外的信息可以使用帮助解析。关于如何获取 TEAM 和 SA/G 数据的任何建议?
这是我正在寻找的 Pandas DataFrame 输出示例:
Team SA/G
Nashville 30.1
Colorado 33.6
Washington 31.0
提前感谢您提供的任何帮助!
代码更新:
第一次尝试只获取了团队信息并且有额外的数据(例如“GP”)。
第一次尝试修复代码:
# parse data (closer to desired output but missing SA/G data)
for tab in table:
tr = table.find_all('tr')
for t in tr:
td = table.find_all('td')
print((t.a.text))
第二次尝试获取了团队数据和 SA/G,但也有额外的数据(例如,每 11 行代码中的“TEAM”和“SA/G”文本)。
这是第二次尝试:
#parses TEAM and SA/G
import pandas as pd
x = pd.read_html("http://www.espn.com/nhl/statistics/team/_/stat/scoring/sort/avgGoals")[0]
print(x[[1, 9]])
【问题讨论】:
-
您应该首先收集所有行,然后获取列 td 标记的值。第一行应该是标题。并非所有列都包含 标记,因此您应该仔细注意这一点,然后提取值
-
请@satyam soni 回复您!我确实尝试了你的建议,我相信它有所帮助。但是,我还想解析一些额外的数据。你对此有什么建议吗?泰先生!
标签: python pandas dataframe parsing web-scraping