使用xpathSApply来刮取R中的XML属性

时间:2014-08-14 18:42:50

标签: xml r xpath

我正在使用xpathSApply(在XML包中)在R中抓取XML并且无法将属性拉出来。

首先,相关的XML片段:

 <div class="offer-name">
        <a href="http://www.somesite.com" itemprop="name">Fancy Product</a>
      </div>

我成功地推出了“Fancy Product&#39; (即元素?)使用:

Products <- xpathSApply(parsedHTML, "//div[@class='offer-name']", xmlValue) 

花了一些时间(我是一个n00b),但文档很好,我可以利用这里有几个已回答的问题。我无法弄清楚如何拉动&#34; http://www.somesite.com&#34;虽然(属性?)。我推测它涉及从“xmlValue”&#39;更改第三个术语。到&#39; xmlGetAttr&#39;但我可以完全离开。

仅供参考(1)还有2个父母&lt; DIV&GT;在我粘贴的片段上面,(2)这里是缩写的完整代码(我认为它不相关,但为了完整性而包括在内)是:

library(XML)
library(httr)

content2 = paste(readLines(file.choose()), collapse = "\n") # User will select file.
parsedHTML = htmlParse(content2,asText=TRUE)

Products <- xpathSApply(parsedHTML, "//div[@class='offer-name']", xmlValue) 

2 个答案:

答案 0 :(得分:14)

href是一个属性。您可以选择相应的节点//div/a,并将xmlGetAttr功能与name = href一起使用:

'<div class="offer-name">
  <a href="http://www.somesite.com" itemprop="name">Fancy Product</a>
  </div>' -> xData
library(XML)
parsedHTML <- xmlParse(xData)
Products <- xpathSApply(parsedHTML, "//div[@class='offer-name']", xmlValue) 
hrefs <- xpathSApply(parsedHTML, "//div/a", xmlGetAttr, 'href')
> hrefs
[1] "http://www.somesite.com"

答案 1 :(得分:5)

您也可以使用XPath直接执行此操作,而不使用xpathSApply(...)

xData <- '<div class="offer-name">
  <a href="http://www.somesite.com" itemprop="name">Fancy Product</a>
  </div>'
library(XML)
parsedHTML <- xmlParse(xData)
hrefs <- unlist(parsedHTML["//div[@class='offer-name']/a/@href"])
hrefs
#                      href 
# "http://www.somesite.com"