空的/半满的桌子用rvest刮

时间:2015-09-22 18:20:21

标签: r web-scraping dataframe html-table rvest

这是网站:

http://en.openei.org/apps/USURDB/rate/view/53bedfaf5257a37b15b4ba01

目标:尝试获取包含空表的所有表。

问题:我没有在网站上找到任何表格。

对于第一个表:点可以作为字符或任何其他数据类型存储在DF中吗?

对于第二张表 :(使用时间需求费用结构)

shtml <-html(http://en.openei.org/apps/USURDB/rate/view/53bedfaf5257a37b15b4ba01#2__Demand, encoding = 'UTF-8')
shtml %>% 
  html_nodes('#flat_demand_strux_table') %>%
  html_table(h=TRUE,trim=FALSE,fill=TRUE)

我在收到html_tag错误后尝试了html_Tag(x) == 'Table' 之后我得到了:

  

UseMethod(“html_nodes”,“html_tables”)中的错误:html_nodes / html_tables没有适用的方法...

对于我尝试html_text然后将其转换为数据框,但它只提供了一个包含所有数据的大行:

Period Tier Max kVA Usage Rate $/kVA Adjustments $/kVA 11 10 36.61 Â Â 2 15 49.05 Â Â 3 20 55.47 Â Â 4 25 61.89 Â Â 5 30 67.98.

尝试了不同的编码但没有结果。

问题出在哪里?

这是我对进一步处理的第一个要求,我只是被困在这里。

1 个答案:

答案 0 :(得分:3)

如果我是你,我会使用XML包。我仍然没有被说服让这个行动变得更加糟糕。我在解决方案上的开始并不完美但它应该有效。通常我使用名为SelectorGadget的Chrome扩展程序然后使用正则表达式来清理文本。如果您要访问多个URL但在每个页面上执行相同的操作,我建议使用foreach包来遍历每个页面。可以选择删除有错误且非常方便的网址

library(XML)
library(dplyr)

url <- 'http://en.openei.org/apps/USURDB/rate/view/53bedfaf5257a37b15b4ba01#2__Demand'

doc = htmlParse(url)

# - xpath taken from SelectorGadget
gg <- getNodeSet(doc, '//*[(@id = "demand_rate_strux_table")]//*[contains(concat( " ", @class, " " ), concat( " ", "strux_view_cell", " " ))]')

# - Get the values from the nodes
Values = sapply(gg, xmlValue)

# - put in table form
Table <- t(matrix(Values, nrow = 5))

# - remove paragraph breaks and 2 - 55 spaces in a row
Names <- gsub('\n|[ ]{2,55}','',Table[1,])

FinalTable <-
data.frame(
  X1 = as.numeric(gsub("Â", '0', gsub('[ ]{1,4}', '', Table[-1,1])))
  ,X2 = as.numeric(gsub("Â ", NA, Table[-1,2]))
  ,X3 = as.numeric(gsub("Â ", NA, Table[-1,3]))
  ,X4 = as.numeric(gsub("Â ", NA, Table[-1,4]))
  ,X5 = as.numeric(gsub("Â ", NA, Table[-1,5]))
) %>%
  # - Fix the period so it is tidy :)
  mutate(
    X1 = cummax(X1)
  )

# - Add in column names
colnames(FinalTable) = Names