在r中使用rvest在多个网页上刮表

Jul*_*ien 1 r web-scraping rvest

我是网络抓取的新手,我正试图在多个网页上刮取表格.这是网站:http://www.baseball-reference.com/teams/MIL/2016.shtml

我能够轻松地在一页上刮一张桌子rvest.有多个表,但我只想抓第一个,这是我的代码

library(rvest)
url4 <- "http://www.baseball-reference.com/teams/MIL/2016.shtml"

Brewers2016 <- url4 %>% read_html() %>% 
html_nodes(xpath = '//*[@id="div_team_batting"]/table[1]') %>% 
html_table()   

Brewers2016 <- as.data.frame(Brewers2016)
Run Code Online (Sandbox Code Playgroud)

问题是我想要抓住可追溯到1970年的页面上的第一个表格.在表格上方的左上角有一个指定前一年的链接.有人知道我怎么做吗?

我也对不同的方法持开放态度,例如,除了rvest之外的其他方法可能会更好.我用rvest是因为它是我开始学习的那个.

Jas*_*lns 5

一种方法是制作urls你感兴趣的所有人的矢量,然后使用sapply:

library(rvest)

years <- 1970:2016
urls <- paste0("http://www.baseball-reference.com/teams/MIL/", years, ".shtml")
# head(urls)

get_table <- function(url) {
  url %>%
    read_html() %>%
    html_nodes(xpath = '//*[@id="div_team_batting"]/table[1]') %>% 
    html_table()
}

results <- sapply(urls, get_table)
Run Code Online (Sandbox Code Playgroud)

results应该是47个data.frame对象的列表; 每个都应该以url它们代表的(即年份)命名.也就是说,results[1]对应于1970年,并且results[47]对应于2016年.