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()