Python,从 URL 获取特定链接,循环访问 url 以从这些页面获取数据
Python, Get specific links from URL, loop through urls to get data from those pages
我想从 http://www.basketball-reference.com/leagues/NBA_2014_games.html 获取所有 boxscore 链接。从那里我想进入那些链接以获取游戏统计信息。然后我想organize/format这些统计数据用于数据分析。
截至目前,我正在从基础 url 获取链接,但我没有循环访问它们,因为我没有正确的 url 列表。一旦我可以获得仅与盒子分数相关的那些(我不知道该怎么做),我如何从各个页面获取信息,以及如何格式化它以将其写入 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
中获取 boxscore urls
转到 urls 并抓取游戏数据
将数据写入 csv
美汤让你轻松获得所需urls。每个 box score url 的 anker 都有一个 Box Score 文本。
ankers = []
for anker in soup.select('a'):
if anker.get_text() == 'Box Score':
ankers.append(anker['href'])
csv 呢?检查所需的 html 标签并从中获取所需的数据。例如,您需要来自 table Score 的信息,因此您可以使用类似
的信息
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()
我想从 http://www.basketball-reference.com/leagues/NBA_2014_games.html 获取所有 boxscore 链接。从那里我想进入那些链接以获取游戏统计信息。然后我想organize/format这些统计数据用于数据分析。
截至目前,我正在从基础 url 获取链接,但我没有循环访问它们,因为我没有正确的 url 列表。一旦我可以获得仅与盒子分数相关的那些(我不知道该怎么做),我如何从各个页面获取信息,以及如何格式化它以将其写入 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
中获取 boxscore urls转到 urls 并抓取游戏数据
将数据写入 csv
美汤让你轻松获得所需urls。每个 box score url 的 anker 都有一个 Box Score 文本。
ankers = []
for anker in soup.select('a'):
if anker.get_text() == 'Box Score':
ankers.append(anker['href'])
csv 呢?检查所需的 html 标签并从中获取所需的数据。例如,您需要来自 table Score 的信息,因此您可以使用类似
的信息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()