簡體   English   中英

刪除XML包中readHTMLTable中的標記

[英]Removing a tag within readHTMLTable in the XML package

我正在嘗試從以下網址的表中抓取數據:

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年的平民死亡當它們應該是6196時存儲為61963,因為上標3被解釋為額外的數字。 表中缺少上標的任何單元都完全正確。

經過幾個小時努力完成文檔后,我能夠使用XML包中的函數parseHTMLgetNodeSet來識別包含<sup>標簽的所有節點,但無法弄清楚該怎么做:

overview <- htmlParse(url.overview)
getNodeSet(overview, "//sup")

我認為我需要刪除XML樹的這些部分,然后將結果傳遞回readHTMLTable進行進一步處理,但我無法弄清楚如何執行此操作。

我非常感謝你的想法。

嘗試

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]]

所以在這里我們只刪除我們不想要的節點,並將剩余部分反饋到readHTMLTable ,然后選擇第二個表。 我在這個Windows框上遇到編碼問題。 您可能希望將編碼保留在htmlParse或者它可能無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM