【问题标题】:Scraping data off of NBA.com从 NBA.com 上抓取数据
【发布时间】:2017-07-08 06:52:35
【问题描述】:

我正在尝试从http://stats.nba.com/team/#!/1610612742/ 的名册数据中抓取数据。到目前为止,我已经尝试过 RCurl 和 XML 包,我尝试过的代码如下:

library(RCurl)
library(XML)
webpage <- getURL("http://stats.nba.com/team/#!/1610612742/")
webpage <- readLines(tc <- textConnection(webpage));
pagetree <- htmlTreeParse(webpage, useInternalNodes = TRUE)
x <- unlist(xpathApply(pagetree,"//*nba-stat-table_overflow/player",xmlValue))
Content <- gsub(pattern = "([\t\n])",
            replacement = " ", x = x, ignore.case = TRUE)

我认为我的 xpathApply 函数格式错误。我应该给它什么路径才能到达名册表?

【问题讨论】:

  • 看起来数据是通过 JavaScript 以某种方式加载的,这意味着您需要使用 RSelenium 之类的东西来拉取 HTML,它可以控制浏览器实际运行必要的脚本。 Here's an example. 当然,请务必阅读条款和条件;他们的数据相当慷慨,但非常具体地说明了如何使用他们的统计数据。
  • 对不起,这只是一个关于网络抓取的家庭作业
  • 无需道歉;这不是最容易抓取的页面。维基百科是一个更容易练习的网站。

标签: r web-scraping xml-parsing rcurl


【解决方案1】:

你可以这样做:

require(rvest)
require(httr)
require(purrr)


ses <- html_session("http://stats.nba.com/team/#!/1610612742/",
                    user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"))
doc <- ses %>% jump_to("http://stats.nba.com/stats/commonteamroster?LeagueID=00&Season=2016-17&TeamID=1610612742")
res <- content(doc$response, "parsed")

res$resultSets[[1]]$rowSet %>% 
  map_df(~as.data.frame(t(.)))

#           V1   V2 V3                  V4 V5  V6   V7  V8           V9 V10 V11               V12     V13
#1  1610612742 2016 00     Justin Anderson  1 G-F  6-6 228 NOV 19, 1993  23   1          Virginia 1626147
#2  1610612742 2016 00          J.J. Barea  5   G  6-0 185 JUN 26, 1984  32  10      Northeastern  200826
#3  1610612742 2016 00        Andrew Bogut  6   C  7-0 260 NOV 28, 1984  32  11              Utah  101106

res$resultSets[[2]]$rowSet %>% 
  map_df(~as.data.frame(t(.)))

#          V1   V2        V3      V4        V5                V6                V7 V8                                     V9
#1 1610612742 2016 CAR107961    Rick  Carlisle     Rick Carlisle     rick_carlisle  1                             Head Coach
#2 1610612742 2016 HUN524472  Melvin      Hunt       Melvin Hunt       melvin_hunt  2                        Assistant Coach
#3 1610612742 2016 CAN081621   Kaleb   Canales     Kaleb Canales     kaleb_canales  2                        Assistant Coach

我是怎么找到这个的:

我检查了网站发出的所有 XHR 调用 并发现它需要一个会话(这就是为什么我使用html_session 创建一个会话)并设置一个用户代理(不确定这是否真的需要......)没有 UA 我的请求被卡住了> 30秒......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多