1. ホーム
  2. xml

[解決済み] xpathSApplyを使用してRでXML属性をスクレイピングする

2022-02-05 10:23:40

質問

xpathSApply(XMLパッケージ)を使ってRでXMLをスクラップしていますが、属性の取り出しに問題があります。

まず、XMLの関連するスニペットです。

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

を使って、「Fancy Product」(=要素?)をうまく引き出せました。

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

しかし、ドキュメントが良くできていて、いくつかの質問に答えることができたので、それを活用することができました。私は、".をどのように引っ張るのかがわかりません。 http://www.somesite.com "が出てしまいますが(属性?) 3番目の項を「xmlValue」から「xmlGetAttr」に変更する必要があると推測していますが、完全に外れているかもしれません。

参考までに(1)私が貼り付けたスニペットの上にさらに2つの親 < div> があり、(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) 

解決方法は?

その 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"