如何在R

时间:2019-08-30 15:24:51

标签: r web-scraping rvest

我正在尝试从此url删除表中包含的数据:

url <- "http://mlb.mlb.com/stats/sortable.jsp#elem=%5Bobject+Object%5D&tab_level=child&click_text=Sortable+Player+hitting&game_type='R'&season=2018&season_type=ANY&league_code='MLB'&sectionType=sp&statType=hitting&page=1&ts=1567176051240&playerType=QUALIFIER&sportCode='mlb'&split=&team_id=&active_sw=&position=&page_type=SortablePlayer&sortOrder='desc'&sortColumn=avg&results=&perPage=50&timeframe=&last_x_days=&extended=0"

我尝试在R中使用以下代码:

library(rvest)
library(xml2)

data <- read_html(url)

hitting2018 <- data %>%
      html_nodes("table") %>%
      html_table(fill=TRUE) %>%
      .[[1]]                      # because is the only table 
hitting2018

运行代码后,r向我显示:Error in .[[1]] : subscript out of bounds

任何帮助或想法抓取数据的人都会很感激,

1 个答案:

答案 0 :(得分:0)

该信息是动态加载的。您可以通过在浏览器中关闭javascript来查看-表格未加载。刷新页面 F5 时,您可以通过开发工具 F12 监视Web流量,并查看源xhr请求(返回json)。

您可以直接调用此网址并解析json

library(jsonlite)

data <- jsonlite::read_json("http://mlb.mlb.com/pubajax/wf/flow/stats.splayer?season=2018&sort_order='desc'&sort_column='avg'&stat_type=hitting&page_type=SortablePlayer&game_type='R'&player_pool=QUALIFIER&season_type=ANY&sport_code='mlb'&results=1000&recSP=1&recPP=50", simplifyVector = T)
print(data$stats_sortable_player$queryResults$row)