2015-01-06 1 views
0

Я хотел бы получить все ссылки boxscore от http://www.basketball-reference.com/leagues/NBA_2014_games.html. Оттуда я хотел бы пойти в эти ссылки, чтобы получить статистику игр. Затем я хотел бы организовать/форматировать эту статистику для использования в анализе данных.Python, Получить конкретные ссылки из URL, прокрутить URL-адреса, чтобы получить данные с этих страниц.

На данный момент я получаю ссылки с базового 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) 

Так в основном

Get boxscore URLs из http://www.basketball-reference.com/leagues/NBA_2014_games.html

перейти к ссылке и царапать данные игры

записи данных в формате CSV

ответ

1

С красивым супом вы можете легко получить только необходимое URLs. Каждый анкер с номером url имеет текст Box Score.

ankers = [] 
for anker in soup.select('a'): 
if anker.get_text() == 'Box Score': 
    ankers.append(anker['href']) 

Как насчет csv? Проверьте необходимые теги html и получите от них необходимые данные. Например, вы хотите получить информацию из таблицы 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() 
+0

Мне удалось получить URL-адреса, но я не понял, как извлечь информацию из них. –

+0

Я отредактировал ответ – dyus

Смежные вопросы