【问题标题】:Scraping tables on multiple web pages with rvest in R在 R 中使用 rvest 在多个网页上抓取表格
【发布时间】:2017-03-01 14:38:06
【问题描述】:

我是网络抓取的新手,我正在尝试抓取多个网页上的表格。这里是网站: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 是因为它是我开始学习的。

【问题讨论】:

  • 我不会筛选它们以找到完美的副本,但如果您只是简单地搜索 stackoverflow.com/…,就会有多个答案

标签: r web-scraping rvest


【解决方案1】:

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

【讨论】:

  • 太棒了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多