使用R中的rvest爬取多个网页上的表格

3
我是一个新手网页爬虫,并尝试在多个网页上爬取表格。这是该网站: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)

问题是我想抓取1970年以来网页上的第一个表格。在表格上方左上角有一个链接指定前一年的数据。有人知道我该如何做吗?
我也愿意尝试其他方式来完成这个任务,比如使用除了rvest之外的其他包可能会更好用。我使用rvest是因为它是我开始学习的。

我不会去筛选它们以找到完美的重复,但是如果你只是简单地搜索一下http://stackoverflow.com/search?q=%5Br%5D+http%3A%2F%2Fwww.baseball-reference.com%2F,你会找到多个答案。 - hrbrmstr
1个回答

7

一种方法是创建您感兴趣的所有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年。


太棒了!非常感谢! - Julien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接