我的目標是從下載的html新聞服務文件中提取新聞文章的日期頻率。第1步:從html文件中提取日期。第2步:計算特定日期的文章頻率。使用R和正則表達式使用XML庫解析來自非結構化html的數據
雖然我不是XML專家,但我很努力地解析數據,因爲文件似乎相對沒有結構化。我的過程中一直如下:
library(XML)
test <- htmlParse('Xi.html')
rt <- xmlRoot(test)
table(names(rt))
這產生了:
body head
1 1
table(unlist(xmlApply(rt,names)))
返回:
a b br font hr meta style table
1 1 3 2 2 1 2 661
text title
3 1
如此看來多數信息的表格中。然而,這些結構不是以可通過htmlTable()檢索的方式構建的,因爲數據是在單獨的行中顯示的,但是這些列有效地連接在一起,沒有文本分隔。
nodeset <- getNodeSet(test,"//table")
head(nodeset)
給
[[1]]
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#f1f1f1">
<td align="left" height="36">
<img src="http://XXXXX.gif"/></td>
</tr>
</table>
[[2]]
<table width="100%" style="table-layout:fixed;">
<tr><td width="30px" valign="top"><font size="2">1. </font></td>
<td><font size="3">港人喜見黃金馬車 馳向中英關係黃金時代</font>
<font size="2" face="Arial">[Ta Kung Pao] 2015-10-27 B21 通識新世代 中英社評 </font> </td>
</tr>
<tr><td colspan="2">
<table width="100%"/></td>
</tr>
</table>
[[3]]
<table width="100%"/>
[[4]]
<table width="100%" style="table-layout:fixed;">
<tr><td width="30px" valign="top"><font size="2">2. </font></td>
<td><font size="3">High-level exchanges between China and ROK</font>
<font size="2" face="Arial">[China Daily] 2015-10-27 Asia-Pacific </font> </td>
</tr>
<tr><td colspan="2">
<table width="100%"/></td>
</tr>
</table>
[[5]]
<table width="100%"/>
因此,而不是試圖通過某種方式創建一個數據幀中提取數據,我想我唯一的選擇是使用正則表達式來從整個文本中提取的日期。我想第一步,這樣做可能是「]」,其中文件中的所有日期的位置,所以我嘗試後執行列表中的字符串分割:
b <- unlist(strsplit(test,"]"))
但這返回你的錯誤:
Error in strsplit(test, "]") : non-character argument
我很感激任何幫助讓我走上正軌。
所有時間都在下面的格式:
2015-10-27