这是网站:
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.
尝试了不同的编码但没有结果。
问题出在哪里?
这是我对进一步处理的第一个要求,我只是被困在这里。
答案 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