2016-10-19 28 views
1

我是新来的网络抓取,并试图在多个网页上刮表。这里是网站:http://www.baseball-reference.com/teams/MIL/2016.shtmlRvesting在多个网页上刮表R

我能够在一页上刮一张桌子,相当容易使用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) 

的问题是,我想蹭着页追溯到1970年的第一个表有一个链接指定前一年在桌子上方的左上角。有人知道我能做到吗?

我也开放了不同的方式来做到这一点,例如,除了rvest之外的其他软件包可能会更好。我用了rvest,因为这是我开始学习的。

+0

我不打算通过他们筛选找到完美的dup,但如果您只是简单地搜索http:// stackoverflow,有多个答案。 com/search?q =%5Br%5D + http%3A%2F%2Fwww.baseball-reference.com%2F – hrbrmstr

回答

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) 

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

+0

太棒了!非常感谢! – Julien