删除XML包中readHTMLTable中的标记

inh*_*kht 6 r

我正在尝试从以下网址的表中抓取数据:

http://www.nfpa.org/itemDetail.asp?categoryID=953&itemID=23033
Run Code Online (Sandbox Code Playgroud)

问题是包含在内的上标

<sup> </sup>
Run Code Online (Sandbox Code Playgroud)

标签.当我使用以下代码时(诚然不是很优雅)

url.overview <- "http://www.nfpa.org/itemDetail.asp?categoryID=953&itemID=23033"
overview <- readHTMLTable(overview)
overview <- overview[[2]]
overview <- overview[-1,]

f <- function(x){
  out <- iconv(x, "latin1", "ASCII", sub="")
  out <- gsub('[\\$,]', '', out) 
  out <- as.numeric(out)
  return(out)
}

overview <- matrix(f(as.character(unlist(overview))), ncol = ncol(overview))
overview <- as.data.frame(overview)
names(overview) <- c('year', 'fires', 'civ.deaths', 'civ.injuries', 'ff.deaths',
                     'ff.injuries', 'damage.reported', 'damage.2010dollars')
Run Code Online (Sandbox Code Playgroud)

我得到了我想要的东西,除了上标中的值被附加到表格单元格中的值的末尾.例如,(使用上面给出的URL中的行和列名称)2001年的平民死亡当它们应该是6196时存储为61963,因为上标3被解释为额外的数字.表中缺少上标的任何单元都完全正确.

经过几个小时努力完成文档后,我能够使用这些函数parseHTMLgetNodeSet从XML包中识别出包含<sup>标签的所有节点,但无法弄清楚该做什么:

overview <- htmlParse(url.overview)
getNodeSet(overview, "//sup")
Run Code Online (Sandbox Code Playgroud)

我认为我需要删除XML树的这些部分,然后将结果传递回readHTMLTable进行进一步处理,但我无法弄清楚如何执行此操作.

我非常感谢你的想法.

shh*_*its 5

尝试

require(XML)
url.overview <- "http://www.nfpa.org/itemDetail.asp?categoryID=953&itemID=23033"
overview <- htmlParse(url.overview,encoding="UTF-8")
temp<-getNodeSet(overview, "/*//span[@class=\"small\"]/sup")
removeNodes(temp)
app.data<-readHTMLTable(overview)[[2]]
Run Code Online (Sandbox Code Playgroud)

所以在这里我们只删除我们不想要的节点并将剩余的节点反馈到readHTMLTable第二个表中。我在此 Windows 框中遇到编码问题。您可能希望将编码留在 中,htmlParse否则它可能会在没有您的情况下正常工作。