我需要将HTML转换为数据框中的值。
例如这段html:
<div class="header">
<h3>title 1</h3>
</div>
<div class="content">
<ul>
<li>info1</li>
<li>info2
</li>
<li>info3
</li>
</ul>
</div>
<div class="header">
<h2>title 2</h2>
</div>
<div class="content">
<ul>
<li>info4</li>
<li>info5
</li>
<li>info6
</li>
</ul>
</div>
我希望将其更改为数据框,如:
Title Info
1 title 1 info1
2 title 1 info2
3 title 1 info3
4 title 2 info4
5 title 2 info5
6 title 2 info6
我尝试了XML包和tm.plugin.webmining包中的函数。我也试过了这个页面上提到的代码:http://tonybreyal.wordpress.com/2011/11/18/htmltotext-extracting-text-from-html-via-xpath/ 到目前为止,我还没有成功找到能满足我想要的功能。有没有人知道如何处理这个问题?
答案 0 :(得分:3)
我认为XML
库中的HTML解析会对此有所帮助。我们假设您上面显示的HTML输入存储在名为intext
的变量中。然后我们可以使用
library(XML)
hh <- htmlParse(intext, asText=T)
#use xpath to extract data
titles <- xpathSApply(hh, "//div[@class='header']/*/text()", xmlValue)
info <- xpathApply(hh, "//div[@class='content']/ul", function(x)
gsub("\\s+","",xpathSApply(x,"./li/text()", xmlValue)))
#merge results together
do.call(rbind, Map(cbind, titles, info))
返回
[,1] [,2]
[1,] "title 1" "info1"
[2,] "title 1" "info2"
[3,] "title 1" "info3"
[4,] "title 2" "info4"
[5,] "title 2" "info5"
[6,] "title 2" "info6"
这是一个矩阵,如果你愿意,你可以很容易地变成data.frame。