使用rvest收集来自ballotpedia.org的列表数据

时间:2018-07-31 21:43:57

标签: r web-scraping rvest

我正在尝试从以前的美国全州大选结果中抓取列表数据,而且我认为ballotpedia.org是从中获取此数据的好地方-因为所有州的URL格式都一致。

这是我用来测试的代码:

library(dplyr)
library(rvest)

# STEP 1 - URL COMPONENTS TO SCRAPE FROM
senate_base_url <- "https://ballotpedia.org/United_States_Senate_elections_in_"
senate_state_urls <- gsub(" ", "_", state.name) 
senate_year_urls <- c(",_2012", ",_2014", ",_2016")

# TEST
test_url <- paste0(senate_base_url, senate_state_urls[10], senate_year_urls[2]) 

这将产生以下URL:https://ballotpedia.org/United_States_Senate_elections_in_Georgia,_2014

使用“ selectorgadget” chrome插件,我选择了包含选举结果的表,并尝试将其解析为R,如下所示:

test_data <- read_html(test_url)
test_data <- test_data %>% 
  html_node(xpath = '//*[@id="collapsibleTable0"]') %>% 
  html_table()

但是,出现以下错误:

Error in UseMethod("html_table") : 
  no applicable method for 'html_table' applied to an object of class "xml_missing"

此外,R对象test_data产生一个包含2个空元素的列表。

有人可以告诉我我在做什么错吗? html_table()函数错误吗?使用html_text()仅返回一个NA字符向量。任何帮助将不胜感激,非常感谢:)。

2 个答案:

答案 0 :(得分:2)

您的xpath语句不正确,因此html_node函数返回空值。

这是使用html标记的解决方案。 “在中心标签内查找表格标签”

library(rvest) 

test_data <- read_html(test_url)
test_data <- test_data %>% html_nodes("center table") %>% html_table()  

或者使用类名称的html标记来检索完全折叠的表:

collapsedtable<-test_data %>% html_nodes("table.collapsible") %>% 
        html_table(fill=TRUE)  

答案 1 :(得分:1)

这对我有用:

library(httr)
library(XML)

r <- httr::GET("https://ballotpedia.org/United_States_Senate_elections_in_Georgia,_2014")
XML::readHTMLTable(rawToChar(r$content))[[2]]