Python,从URL获取特定链接,循环访问URL以从这些页面获取数据

时间:2015-01-06 06:31:18

标签: python csv web-scraping

我想从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

1 个答案:

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