使用rvest和tidyverse获取错误抓取网页

时间:2019-09-07 18:02:46

标签: r tidyverse rvest

我正在尝试通过CBS网站抓取幻想足球的预测,但我遇到了一个问题。链接here

我已经阅读了解决方案here,但它们对我不起作用

我尝试了以下代码,该代码去年有效,但今年却出错。我假设CBS对他们的网站进行了一些更改,从而产生了影响。

qbs <- read_html(paste0("https://www.cbssports.com/fantasy/football/stats/QB/2019/1/projections/ppr")) %>%
  html_nodes('table') %>%
  html_table(fill = TRUE)

这是我收到的错误:

Error in if (length(p) > 1 & maxp * n != sum(unlist(nrows)) & maxp * n !=  : 
  missing value where TRUE/FALSE needed

1 个答案:

答案 0 :(得分:2)

出现此问题是因为该表具有两个标题行。

第一标题行是一个分组的标题(“ PASSING”,“ RUSHING”,“ MISC”),其列数与其所代表的数据一样多。第二个标题行未分组,并且与数据的长度(列方向)相同。如果我们删除第一个标题行并保留第二个标题行,它将进行解析。

page <- read_html("https://www.cbssports.com/fantasy/football/stats/QB/2019/1/projections/ppr")

table <- page %>% 
    html_nodes('table') %>% 
    as.character()

grouped_header <- page %>% 
    html_nodes('.TableBase-headGroupTr') %>% 
    as.character()

table %>% 
    gsub(grouped_header, "", ., perl=T) %>% 
    read_html() %>% 
    html_table()