我正在尝试从以下 url 的表中抓取数据:
http://www.nfpa.org/itemDetail.asp?categoryID=953&itemID=23033
问题是包含在
<sup> </sup>
标签。当我使用以下代码时(诚然不是很优雅)
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')
我得到了我想要的,除了上标中的值被附加到表格单元格中值的末尾。例如,(使用上面给出的 url 中的行和列名称)2001 年的平民死亡数存储为 61963,而应为 6196,因为上标 3 被解释为额外的数字。表格中缺少上标的任何单元格都完全正确。
在文档中苦苦挣扎了几个小时后,我能够使用这些函数parseHTML
并getNodeSet
从 XML 包中识别所有包含<sup>
标签的节点,但无法从那里弄清楚该怎么做:
overview <- htmlParse(url.overview)
getNodeSet(overview, "//sup")
我认为我需要以某种方式删除 XML 树的这些部分,然后将结果传递回 readHTMLTable 以进行进一步处理,但我不知道该怎么做。
我会非常感谢你的想法。