刮的交互表中的R与rvest(scraping an interactive table in R

2019-09-30 00:25发布

我想从以下链接刮滚动表: http://proximityone.com/cd114_2013_2014.htm

我使用rvest但我无法找到该表的正确的XPath。 我当前的代码如下:

url <- "http://proximityone.com/cd114_2013_2014.htm" 
table <- gis_data_html %>%
html_node(xpath = '//span') %>%
html_table()

目前我得到的错误“为‘html_table’不适用的方法应用到类的对象‘xml_missing’”

任何人都知道我需要改变刮的交互式表格中的链接?

Answer 1:

所以,你所面临的问题是, rvest会读一个页面的源代码,但它不会在页面上执行JavaScript。 当我检查的交互式表格,我看到

<textarea id="aw52-box-focus" class="aw-control-focus " tabindex="0" 
onbeforedeactivate="AW(this,event)" onselectstart="AW(this,event)" 
onbeforecopy="AW(this,event)" oncut="AW(this,event)" oncopy="AW(this,event)" 
onpaste="AW(this,event)" style="z-index: 1; width: 100%; height: 100%;">
</textarea>

但是当我看网页源代码,“aw52盒为关注焦点”不存在。 这是因为它是通过JavaScript加载页面创建的。

你有几个选项来处理这个问题。 在“易”一个是使用RSelenium和使用实际浏览器加载网页,然后它的加载后得到的元素。 其他选项是通过javascript来读,看看它是从获取数据,然后点击成,而不是刮表。

UPDATE

原来它真的很容易阅读的JavaScript - 它只是加载一个CSV文件。 地址是纯文本, http://proximityone.com/countytrends/cd114_acs2014utf8_hl.csv

该.csv不具有列标题,但这些都在<script>以及

var columns = [
"FirstNnme",
"LastName",
"Party",
"Feature",
"St",
"CD",
"State<br>CD",
"State<br>CD",
"Population<br>2013", 
"Population<br>2014", 
"PopCh<br>2013-14", 
"%PopCh<br>2013-14", 
"MHI<br>2013", 
"MHI<br>2014", 
"MHI<br>Change<br>2013-14", 
"%MHI<br>Change<br>2013-14", 
"MFI<br>2013", 
"MFI<br>2014", 
"MFI<br>Change<br>2013-14", 
"%MFI<br>Change<br>2013-14", 
"MHV<br>2013", 
"MHV<br>2014", 
"MHV<br>Change<br>2013-14", 
"%MHV<br>Change<br>2013-14", 

]

编程解决方案

而不是通过javacript挖掘的(如果有这个网站,你想要几个这样的页面),你可以尝试这个职业太编程。 我们阅读页面,获得<script>的笔记,获得“文本”(脚本本身),并寻找到CSV文件的引用。 然后,我们扩大了相对URL和阅读。这不列名的帮助,但不应该太硬解压即得。

library(rvest)
page = read_html("http://proximityone.com/cd114_2013_2014.htm")
scripts = page %>% 
  html_nodes("script") %>% 
  html_text() %>% 
  grep("\\.csv",.,value=T)
relCSV = stringr::str_extract(scripts,"\\.\\./.*?csv")
fullCSV = gsub("\\.\\.","http://proximityone.com",relCSV)
data = read.csv(fullCSV,header = FALSE)


文章来源: scraping an interactive table in R with rvest
标签: r rvest