使用R来抓取嵌套的XML数据

时间:2013-01-08 13:43:16

标签: xml r xpath web-scraping

您好我是R的新手,我正试图抓取一个网站获取一些数据。问题是数据存储不一致。

有时候我会看到:

<div class = "text">   The text I want   </div>

有时我看到了:

<div class = "text"><div class = "text">   The text I want   </div></div>

到目前为止,我正在使用XML包和以下R代码:

doc = htmlTreeParse(url, useInternalNodes = T)
text = xpathSApply(doc, "//*/div[@class='text']", xmlValue) 

问题是,当遇到第二个示例时,此代码将计算“我想要的文本”两次,因为它会两次找到<div class>属性。我只想算一次因为它只出现一次。

非常感谢任何指针!

2 个答案:

答案 0 :(得分:2)

如果您只想计算出现次数,那么您应该能够找到所有节点

all_text <- xpathSApply(doc, "//*/div[@class='text']", xmlValue)

和加倍节点

doubled_text <- xpathSApply(doc, "//*/div[@class='text']/div[@class='text']", xmlValue)

然后从另一个中减去一个的长度以获得真实的反射。

答案 1 :(得分:2)

xtext <- "<div class = \"text\">   The text I want   </div>
</div><div class = \"text\"><div class = \"text\">   The text I want   </div></div>"
doc <- htmlParse(xtext)
xpathSApply(doc,"//*/div[@class='text']/text()")

#[[1]]
#   The text I want    

#[[2]]
#   The text I want