我之前使用过revest来抓取Wiki,但是这次我无法从可折叠表(帖子的第一个表)中收集数据:
library(tidyverse)
library(rvest)
url <- "https://es.wikipedia.org/wiki/Anexo:Sondeos_de_intenci%C3%B3n_de_voto_para_las_elecciones_generales_de_Espa%C3%B1a_de_noviembre_de_2019"
sample <- url %>%
read_html() %>%
html_nodes(xpath = '/html/body/div[3]/div[3]/div[4]/div/table[1]') %>%
html_table(header = T)
我收到此错误消息:
if(length(p)> 1&maxp * n!= sum(unlist(nrows))&maxp * n时出错
!=:需要TRUE / FALSE的缺失值
我感觉这是由于嵌套单元格引起的,但是我找不到删除第一行和最后一行的方法。
最佳答案
我不太确定,但是rvest可能由于表头中的链接而导致表出现问题。一种选择是手动读取行,然后创建所需的数据框。这不是一个非常优雅的解决方案,但是可以解决。
该表还有几行,单元格数不完整。这些行仅在表的页眉和页脚中,不需要。我删除了这些行,转换为矩阵/数据框,然后重命名了几列。
请参阅代码的注释以获取更多信息。
library(rvest)
url <- "https://es.wikipedia.org/wiki/Anexo:Sondeos_de_intenci%C3%B3n_de_voto_para_las_elecciones_generales_de_Espa%C3%B1a_de_noviembre_de_2019"
page<- url %>% read_html()
tables<- page%>% html_nodes('table')
#first attempt
#tables[1] %>% html_table(fill=TRUE) #Causes an error
#pull the rows
rows<-tables[1] %>% html_nodes('tr')
#remove rows which do not have the full number cells
rows<- rows[-which(sapply(rows, function(x){length(html_children(x))}) != 20)]
#convert to text
values<-rows %>% html_nodes('td') %>% html_text() %>% trimws()
#create data frame
answer<-as.data.frame(matrix(values, ncol = 20, byrow=TRUE))
#find variable names and rename columns
variablenames <- rows %>% html_nodes('th') %>% html_text() %>% trimws()
names(answer)[which(variablenames !="")] <- variablenames[which(variablenames !="")]
answer
您仍然需要使用实际的电视台名称手动重命名该列。
关于r - 带有RVest的Scrape Wiki可折叠表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60710824/