2014-10-22 195 views
1

我想湊這個頁面:http://stats.nba.com/playerGameLogs.html?PlayerID=2544&pageNo=1&rowsPerPage=100刮網站使用JavaScript

我想獲得該表爲大熊貓數據幀。我試過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], 
    ... 
} 

另一種解決方案是使用NBA的API,看到幾個選項這裏:

+0

令人驚歎。非常感謝 – user1610719 2014-10-22 02:25:10