我的目标是从下载的html新闻服务文件中提取新闻文章的日期频率。第1步:从html文件中提取日期。第2步:计算特定日期的文章频率。
我正在努力解析数据,因为文件似乎相对非结构化,尽管我不是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%"/>
因此,我认为我唯一的选择是使用正则表达式从整个文本中提取日期,而不是尝试通过某种方式创建数据框来提取数据。我认为这样做的第一步可能是在&#34;]&#34;之后在列表上执行字符串拆分。文件中的所有日期都在哪里,所以我试过了:
b <- unlist(strsplit(test,"]"))
但是这会返回错误:
Error in strsplit(test, "]") : non-character argument
我很感激能帮助我走上正轨。
所有日期均采用以下格式:
2015-10-27
答案 0 :(得分:1)
我只知道R,但是strsplit
需要一个字符串。你给它test
,这是htmlParse
的结果,似乎是某种树。
R regular expressions是扩展或类似Perl 。无论如何匹配所有日期,您都可以使用
\d\d\d\d-\d\d-\d\d
查看strsplit
的手册,似乎是提取日期的错误工具。你应该考虑grep
。像
dates <- grep("\d\d\d\d-\d\d-\d\d", htmltext, value = TRUE)
可能有用,应该返回日期。