R:网络抓取:XML 内容似乎不是 XML:使用 HTMLParse

R: Webscraping: XML content does not seem to be XML: Using HTMLParse

提问人:njmcd 提问时间:11/14/2020 更新时间:11/14/2020 访问量:254

问:

我正在尝试对多年来的数据进行网络抓取(由不同的网页表示)。我的 2019 年数据完全按照我想要的方式工作,但是当我尝试像准备 2019 年数据一样准备 2016 年数据时出现错误。

url19 <- 'https://www.pro-football-reference.com/draft/2019-combine.htm'

get_pfr_HTML_file19 <- GET(url19)

combine.parsed19 <- htmlParse(get_pfr_HTML_file19)

page.tables19 <- readHTMLTable(combine.parsed19, stringsAsFactors = FALSE)

data19 <- data.frame(page.tables19[1])

cleanData19 <- data19[!rowSums(data19 == "")> 0,]

cleanData19 <- filter(cleanData19, cleanData19$combine.Pos == 'CB' | cleanData19$combine.Pos == 'S')

cleanData19 正是我想要的,但是当我尝试使用 2016 年的数据运行它时,我收到错误:XML 内容似乎不是 XML:''

url16 <- 'https://www.pro-football-reference.com/draft/2016-combine.htm'

get_pfr_HTML_file16 <- GET(url16)

combine.parsed16 <- htmlParse(get_pfr_HTML_file16)

page.tables16 <- readHTMLTable(combine.parsed16, stringsAsFactors = FALSE)

data16 <- data.frame(page.tables16[1])

cleanData16 <- data16[!rowSums(data16 == "")> 0,]

cleanData16 <- filter(cleanData16, cleanData16$combine.Pos == 'CB' | cleanData16$combine.Pos == 'S')

尝试运行时出现错误combine.parsed16 <- htmlParse(get_pfr_HTML_file16)

html r xml 网页抓取 HTML 解析

评论

0赞 MrFlick 11/14/2020
请确保列出正在使用的所有非基本 R 包。看起来也许你正在梳理和?尝试直接将 URL 传递给而不是使用 如果您想使用 ,那么最好使用包来处理数据。httrXMLhtmlParseGETGETxml2

答:

1赞 Johan Rosa 11/14/2020 #1

我不是 100% 确定您想要的输出,您没有在示例中包含您的库调用。无论如何,使用此代码,您可以获得表格

library(rvest)
library(dplyr)

url <- 'https://www.pro-football-reference.com/draft/2016-combine.htm'

read_html(url) %>% 
  html_nodes(".stats_table") %>% 
  html_table() %>% 
  as.data.frame() %>% 
  filter(Pos == 'CB' | Pos == "S")

几年一次:

library(rvest)
library(magrittr)
library(dplyr)
library(purrr)

years <- 2013:2019
urls <- paste0(
  'https://www.pro-football-reference.com/draft/',
  years,
  '-combine.htm')

map(
  urls,
  ~read_html(.x) %>% 
    html_nodes(".stats_table") %>% 
    html_table() %>% 
    as.data.frame()
) %>%
  set_names(years) %>% 
  bind_rows(.id = "year") %>% 
  filter(Pos == 'CB' | Pos == "S")