用rvest刮空/半满桌子

用rvest刮空/半满桌子,r,web-scraping,dataframe,html-table,rvest,R,Web Scraping,Dataframe,Html Table,Rvest,这是网站: 目标:尝试获取包括空表在内的所有表 问题:我没有在网站上得到任何表格 对于第一个表:点是否可以作为字符或任何其他数据类型存储在DF中 第二表:(使用时间需求费用结构) shtml% html_节点(“#平面#u需求_结构_表”)%>% html_表格(h=TRUE,trim=FALSE,fill=TRUE) 在获得html\u标记(x)='Table'错误后,我尝试了html\u标记 之后我得到: UseMethod(“html\U节点”、“html\U表”)中出错:没有适用于h

这是网站:

目标:尝试获取包括空表在内的所有表

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

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

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

shtml%
html_节点(“#平面#u需求_结构_表”)%>%
html_表格(h=TRUE,trim=FALSE,fill=TRUE)
在获得
html\u标记(x)='Table'
错误后,我尝试了
html\u标记
之后我得到:

UseMethod(“html\U节点”、“html\U表”)中出错:没有适用于html\U节点/html\U表的方法

对于这两种情况,我都尝试了
html\u text
,然后将其转换为数据帧,但它只给出一个大行,其中所有数据都是连续的,如:

Period Tier Max kVA使用率$/kVA调整$/kVA 11 10 36.61 2 15 49.05 3 20 55.47 4 25 61.89 5 30 67.98。

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

问题在哪里


这是我进一步处理的第一个要求,我只停留在这里。

如果我是你,我会使用XML包。我还没有被说服去rvest。我的解决方案开始时并不完美,但应该可行。通常我使用一个名为SelectorGadget的Chrome扩展,然后使用正则表达式来清理文本。如果您点击多个URL,但在每个页面上执行相同的操作,我建议使用foreach包在每个页面上循环。有一个选项可以删除有错误的URL,这非常方便

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
库(XML)
图书馆(dplyr)

url如果我是你,我会使用XML包。我还没有被说服去rvest。我的解决方案开始时并不完美,但应该可行。通常我使用一个名为SelectorGadget的Chrome扩展,然后使用正则表达式来清理文本。如果您点击多个URL,但在每个页面上执行相同的操作,我建议使用foreach包在每个页面上循环。有一个选项可以删除有错误的URL,这非常方便

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
库(XML)
图书馆(dplyr)

url如果我是你,我会使用XML包。我还没有被说服去rvest。我的解决方案开始时并不完美,但应该可行。通常我使用一个名为SelectorGadget的Chrome扩展,然后使用正则表达式来清理文本。如果您点击多个URL,但在每个页面上执行相同的操作,我建议使用foreach包在每个页面上循环。有一个选项可以删除有错误的URL,这非常方便

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
库(XML)
图书馆(dplyr)

url如果我是你,我会使用XML包。我还没有被说服去rvest。我的解决方案开始时并不完美,但应该可行。通常我使用一个名为SelectorGadget的Chrome扩展,然后使用正则表达式来清理文本。如果您点击多个URL,但在每个页面上执行相同的操作,我建议使用foreach包在每个页面上循环。有一个选项可以删除有错误的URL,这非常方便

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
库(XML)
图书馆(dplyr)

url由于没有任何
s,因此您没有得到任何表。有许多
s,因此
html\u table()
不起作用。您必须以不同的方式针对每个元素,并手动构建数据框架。哦!感谢您快速而正确的响应,但是选择每个元素将非常繁琐,我必须在每个网页(Utilty)的循环中运行它,这可能会导致很长的时间/负载。是否有其他选项。由于没有任何
s,因此您不会得到任何表。有许多
s,因此
html\u table()
不起作用。您必须以不同的方式针对每个元素,并手动构建数据框架。哦!感谢您快速而正确的响应,但是选择每个元素将非常繁琐,我必须在每个网页(Utilty)的循环中运行它,这可能会导致很长的时间/负载。是否有其他选项。由于没有任何
s,因此您不会得到任何表。有许多
s,因此
html\u table()
不起作用。您必须以不同的方式针对每个元素,并手动构建数据框架。哦!感谢您快速而正确的响应,但是选择每个元素将非常繁琐,我必须在每个网页(Utilty)的循环中运行它,这可能会导致很长的时间/负载。是否有其他选项。由于没有任何
s,因此您不会得到任何表。有许多
s,因此
html\u table()
不起作用。您必须以不同的方式针对每个元素,并手动构建数据框架。哦!感谢您快速而正确的响应,但是选择每个元素将非常繁琐,我必须在每个网页(Utilty)的循环中运行它,这可能会导致很长的时间/负载。还有其他选择吗?哇!JackStat真的很管用,我也试过使用XML,但没有使用getNode,因为从一开始我就认为它是一个表。我很高兴这对你有用。也许我是老派,但我已经使用XML有一段时间了,我喜欢它的灵活性。有几页是相同的,你需要刮吗?如果有,我建议转到一个包含所有链接(如果存在)的页面,并将它们刮到一个向量中,然后您可以使用foreach遍历每个链接,并从中构建一个大型data.frame。刮得开心!哇!JackStat真的很管用,我也试过使用XML,但没有使用getNode,因为从一开始我就认为它是一个表。我很高兴这对你有用。也许我是老派,但我已经使用XML有一段时间了,我喜欢它的灵活性。有几页是相同的,你需要刮吗?如果有的话,我建议去p