我想从http://www.basketball-reference.com/leagues/NBA_2014_games.html获取所有的箱形分数链接。从那里我想进入这些链接来获取游戏统计数据。然后我想组织/格式化这些统计数据以用于数据分析。
截至目前,我从基本网址获取链接,但我没有循环浏览它们,因为我没有正确的网址列表。一旦我可以获得与盒子分数相关的那些(我不知道该怎么做),我如何从各个页面获取信息,以及如何格式化以将其写入csv。
import csv
from urlparse import urljoin
from bs4 import BeautifulSoup
import requests
base_url = 'http://www.basketball-reference.com'
data = requests.get("http://www.basketball-reference.com/leagues/NBA_2014_games.html")
soup = BeautifulSoup(data.content)
links = [[urljoin(base_url, link['href']) if not link['href'].startswith('http') else
link['href']] for link in soup.select("a[href]")]
print links
with open('output.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerows(links)
所以基本上
从http://www.basketball-reference.com/leagues/NBA_2014_games.html
获取箱子比分网址转到网址并抓取游戏数据
将数据写入csv
答案 0 :(得分:1)
有了美丽的汤,您可以轻松获得所需的网址。每个带有盒子得分网址的anker都有一个Box Score文本。
ankers = []
for anker in soup.select('a'):
if anker.get_text() == 'Box Score':
ankers.append(anker['href'])
csv怎么样?检查所需的html标签并从中获取所需的数据。例如,您需要表格分数中的信息,以便您可以使用类似
的内容for anker in ankers:
data = requests.get("%s/%s" % (base_url, anker)
soup1 = BeautifulSoup(data.content)
scoring_th = [th for th in soup1.find_all('th') if th.text == u'Scoring'][0] # only one per page
# get table
table = scoring_th.parent.parent
# parse table data
for td in table.find_all('td'):
if td.find('a'):
game_stat += '\n%s' % td.find('a').get_text()
else:
game_stat += ', %s' % td.get_text()