使用javascript的刮痧网站

时间:2014-10-22 01:57:04

标签: python html web-scraping

我正试图抓住这个页面:http://stats.nba.com/playerGameLogs.html?PlayerID=2544&pageNo=1&rowsPerPage=100

我想把桌子放到pandas DataFrame中。我尝试过BeautifulSoup,很明显它不起作用。我尝试使用硒,但我没有运气。我希望有人在继续沿着selenium路径前有一个更好的解决方案,因为它至少打开浏览器并显示正确的输出,Firefox只是强制关闭之后。我也不想在物理上打开浏览器,因为我会为1000页进行此操作。

1 个答案:

答案 0 :(得分: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,请参阅以下几个选项: