Rvestパッケージを使用して、Webページからデータをスクレイピングしようとしています。単純な形式では、htmlコードは次のようになります。
<div class="style">
<input id="a" value="123">
<input id="b">
</div>
最初の入力から値123を取得します。私は次のRコードを試しました:
library(rvest)
url<-"xxx"
output<-html_nodes(url, ".style input")
これは入力タグのリストを返します:
[[1]]
<input id="a" value="123">
[[2]]
<input id="b">
次に、html_nodeを使用して、IDで最初の入力タグを参照してみました。
html_node(output, "#a")
ここでは、必要な入力タグの代わりにnullのリストを返しました。
[[1]]
NULL
[[2]]
NULL
私の質問は、IDを使用して入力タグを参照するにはどうすればよいですか?
Xpathを使用できます。
require(rvest)
text <- '<div class="style">
<input id="a" value="123">
<input id="b">
</div>'
h <- read_html(text)
h %>%
html_nodes(xpath = '//*[@id="a"]') %>%
xml_attr("value")
Css-およびxpath-selectorを取得する最も簡単な方法は http://selectorgadget.com/ を使用することです。次のような特定の属性については、Chromeの開発者ツールバーを使用して、xpathを取得します。
これは、ストレートCSSセレクターで問題なく機能します。
library(rvest)
doc <- '<div class="style">
<input id="a" value="123">
<input id="b">
</div>'
pg <- html(doc)
html_attr(html_nodes(pg, "div > input:first-of-type"), "value")
## [1] "123"
回答の追加bc idで選択するための簡単なcssセレクタの省略形が表示されません:#your_id_name
を使用:
h %>%
html_node('#a') %>%
html_attr('value')
必要に応じて「123」を出力します。
他と同じ設定:
require(rvest)
text <- '<div class="style">
<input id="a" value="123">
<input id="b">
</div>'
h <- read_html(text)