【发布时间】:2019-06-24 09:57:05
【问题描述】:
我已经开始了一个宠物项目,该项目基本上是一个带有漂亮简单 GUI 的大量 NFL 统计数据的索引编译。幸运的是,https://www.pro-football-reference.com 网站拥有您可以想象的所有表格形式的数据,可以在网站上导出为 CSV 格式并手动复制/粘贴。我开始这样做,然后使用 Pandas 库,开始将 CSV 读入 DataFrame 以利用数据。
这很好用,但是,手动获取所有这些数据非常乏味,所以我决定尝试创建一个网络爬虫,它可以爬取 HTML 表格并将它们转换为可用的 CSV 格式。我正在努力,特别是要隔离单个表格,还要让生成的 CSV 以可读/可用的格式呈现。
这是刮板现在的样子:
from bs4 import BeautifulSoup
import requests
import csv
def table_Scrape():
url = 'https://www.pro-football-reference.com/teams/nwe/2008.htm'
req = requests.get(url)
soup = BeautifulSoup(req.text, 'html.parser')
table = soup.select_one('table.stats_table')
headers = [th.text.encode("utf-8") for th in table.select("tr th")]
with open("out.csv", "w", encoding='utf-8') as f:
wr = csv.writer(f)
wr.writerow(headers)
wr.writerows([
[td.text.encode("utf-8") for td in row.find_all("td")]
for row in table.select("tr + tr")
])
table_Scrape()
这确实正确地将请求发送到 URL,但没有获取我正在寻找的数据,即“Rushing_and_Receiving”。相反,它会获取“团队统计和排名”页面上的第一个表。它还以一种相当丑陋/无用的格式呈现 CSV,如下所示:
b'',b'',b'',b'Tot Yds & TO',b'',b'',b'Passing',b'Rushing',b'Penalties',b'',b'Average Drive',b'Player',b'PF',b'Yds',b'Ply',b'Y/P',b'TO',b'FL',b'1stD',b'Cmp',b'Att',b'Yds',b'TD',b'Int',b'NY/A',b'1stD',b'Att',b'Yds',b'TD',b'Y/A',b'1stD',b'Pen',b'Yds',b'1stPy',b'#Dr',b'Sc%',b'TO%',b'Start',b'Time',b'Plays',b'Yds',b'Pts',b'Team Stats',b'Opp. Stats',b'Lg Rank Offense',b'Lg Rank Defense'
b'309',b'4944',b'920',b'5.4',b'22',b'8',b'268',b'288',b'474',b'3222',b'27',b'14',b'6.4',b'176',b'415',b'1722',b'8',b'4.1',b'78',b'81',b'636',b'14',b'170',b'30.6',b'12.9',b'Own 27.8',b'2:38',b'5.5',b'29.1',b'1.74'
b'8',b'5',b'',b'',b'8',b'13',b'1',b'',b'12',b'12',b'13',b'5',b'13',b'',b'4',b'6',b'4',b'7',b'',b'',b'',b'',b'',b'1',b'21',b'2',b'3',b'2',b'5',b'4'
b'8',b'10',b'',b'',b'20',b'20',b'7',b'',b'7',b'11',b'31',b'15',b'21',b'',b'11',b'15',b'4',b'15',b'',b'',b'',b'',b'',b'24',b'16',b'5',b'13',b'14',b'15',b'11'
我知道获取正确表格的问题在于以下行:
table = soup.select_one('table.stats_table')
我仍然认为是 Python 新手,所以如果有人可以帮助我使用 BS4 查询并将特定表解析为 CSV 格式,我将不胜感激!
提前致谢!
【问题讨论】:
标签: python pandas csv web-scraping beautifulsoup