r - 尝试使用 rvest 循环命令以从多个页面抓取表

标签 r web-scraping rvest

我正在尝试从不同的足球队中抓取 HTML 表格。这是我想要抓取的表格,但是我想从所有球队中抓取同一个表格,以最终创建一个包含球员姓名及其数据的 CSV 文件。

http://www.pro-football-reference.com/teams/tam/2016_draft.htm

# teams
teams <- c("ATL", "TAM", "NOR", "CAR", "GNB", "DET", "MIN", "CHI", "SEA", "CRD", "RAM", "NWE", "MIA", "BUF", "NYJ", "KAN", "RAI", "DEN", "SDG", "PIT", "RAV", "SFO", "CIN", "CLE", "HTX", "OTI", "CLT", "JAX", "DAL", "NYG", "WAS", "PHI")

# loop
for(i in teams) {
  url <-paste0("http://www.pro-football-reference.com/teams/", i,"/2016-snap-counts.htm#snap_counts::none", sep="")
  webpage <- read_html(url)

  # grab table
  sb_table <- html_nodes(webpage, 'table')
html_table(sb_table)
head(sb_table)
  # bind to dataframe
df <- rbind(df, sb_table)
}

我收到一个错误,认为我应该使用 CSS 或 Xpath,而不是两者都使用,但我无法弄清楚问题到底出在哪里(我怀疑 html_nodes 命令)。谁能帮我解决这个问题吗?

最佳答案

我认为您的网址构建得很糟糕,此外,团队的名称区分大小写。你能尝试这样的事情吗?

library(rvest)
library(magrittr)

# teams
teams <- c("ATL", "TAM", "NOR", "CAR", "GNB", "DET", "MIN", "CHI", "SEA", "CRD", "RAM", "NWE", "MIA", "BUF", "NYJ", "KAN", "RAI", "DEN", "SDG", "PIT", "RAV", "SFO", "CIN", "CLE", "HTX", "OTI", "CLT", "JAX", "DAL", "NYG", "WAS", "PHI")

tables <- list()
index <- 1
for(i in teams){
  try({
  url <- paste0("http://www.pro-football-reference.com/teams/", tolower(i), "/2016_draft.htm")
  table <- url %>% 
    read_html() %>% 
    html_table(fill = TRUE)

  tables[index] <- table

  index <- index + 1

  })
}

df <- do.call("rbind", tables)

PS:我不明白为什么这个问题被否决。看起来制定得很好......

关于r - 尝试使用 rvest 循环命令以从多个页面抓取表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356491/

相关文章:

r - 是否有一些函数可以使用 group_by 在 R dplyr 中保留唯一值?

r - For循环日期不丢失日期格式

r - 从 tidymodels 绘制决策树结果

json - 有什么方法可以抓取/抓取谷歌搜索的 "about"部分吗?

python - 如何为Safari 的Selenium 设置UA 和Headless?

Rvest 循环在重定向网站上中断

html - Rvest 网页抓取带来仅包含列名称的空数据表

r - 从数据框列中获取最频繁的字符串

python - 无法使用 Python 抓取具有不变 URL 的多个页面

r - 网页在浏览器中工作,但不是来自 R : SSL certificate problem: certificate has expired