2014-10-22 3 views
1

Я пытаюсь царапать эту страницу: http://stats.nba.com/playerGameLogs.html?PlayerID=2544&pageNo=1&rowsPerPage=100Зачистка сайта, который использует JavaScript

Я желающий получить таблицу в панде DataFrame. Я пробовал BeautifulSoup, и очевидно, что это не сработает. Я пытался использовать селен, но мне не повезло. Я надеюсь, что у кого-то есть лучшее решение, прежде чем я продолжу движение по селену, так как он, по крайней мере, открывает браузер и показывает правильный результат, Firefox просто заставляет закрываться после. Я также предпочитаю не физически открывать браузер, как я бы делал это для 1000 страниц.

ответ

3

Нет необходимости очищать HTML или использовать высокоуровневый подход selenium.

Имитировать базовые запросы XHR, поступающие на сервер, и вернуть данные JSON, которые используются для заполнения таблицы на странице.

Вот пример использования requests:

import requests 

url = 'http://stats.nba.com/stats/playergamelog' 

params = { 
    'Season': '2013-14', 
    'SeasonType': 'Regular Season', 
    'LeagueID': '00', 
    'PlayerID': '2544', 
    'pageNo': '1', 
    'rowsPerPage': '100' 
} 
response = requests.post(url, data=params) 

print response.json() 

Печать структуры JSON, содержащие бревнами игрок игры:

{u'parameters': {u'LeagueID': u'00', 
       u'PlayerID': 2544, 
       u'Season': u'2013-14', 
       u'SeasonType': u'Regular Season'}, 
u'resource': u'playergamelog', 
u'resultSets': [{u'headers': [u'SEASON_ID', 
           u'Player_ID', 
           u'Game_ID', 
           u'GAME_DATE', 
           u'MATCHUP', 
           u'WL', 
           u'MIN', 
           u'FGM', 
           u'FGA', 
           u'FG_PCT', 
           u'FG3M', 
           u'FG3A', 
           u'FG3_PCT', 
           u'FTM', 
           u'FTA', 
           u'FT_PCT', 
           u'OREB', 
           u'DREB', 
           u'REB', 
           u'AST', 
           u'STL', 
           u'BLK', 
           u'TOV', 
           u'PF', 
           u'PTS', 
           u'PLUS_MINUS', 
           u'VIDEO_AVAILABLE'], 
        u'name': u'PlayerGameLog', 
        u'rowSet': [[u'22013', 
           2544, 
           u'0021301192', 
           u'APR 12, 2014', 
           u'MIA @ ATL', 
           u'L', 
           37, 
           10, 
           22, 
           0.455, 
           3, 
           7, 
           0.429, 
           4, 
           8, 
           0.5, 
           3, 
           5, 
           8, 
           5, 
           0, 
           1, 
           3, 
           2, 
           27, 
           -13, 
           1], 
           [u'22013', 
           2544, 
           u'0021301180', 
           u'APR 11, 2014', 
           u'MIA vs. IND', 
           u'W', 
           35, 
           11, 
           20, 
           0.55, 
           2, 
           4, 
           0.5, 
           12, 
           13, 
           0.923, 
           1, 
           5, 
           6, 
           1, 
           1, 
           1, 
           2, 
           1, 
           36, 
           13, 
           1], 
           [u'22013', 
           2544, 
           u'0021301167', 
           u'APR 09, 2014', 
           u'MIA @ MEM', 
           u'L', 
           41, 
           14, 
           23, 
           0.609, 
           3, 
           5, 
           0.6, 
           6, 
           7, 
           0.857, 
           1, 
           5, 
           6, 
           5, 
           2, 
           0, 
           5, 
           1, 
           37, 
           -8, 
           1], 
    ... 
} 

Альтернативное решение будет использовать API NBA, видеть несколько вариантов здесь:

+0

Amazing. огромное спасибо – user1610719

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