我是网络抓取的新手,我正试图在多个网页上抓桌子。这是网站: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,因为它是我开始学习的那个。
答案 0 :(得分: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年。