web-dev-qa-db-ja.com

IDで特定のCSSノードを選択する方法を確認する

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を使用して入力タグを参照するにはどうすればよいですか?

10
Vegebird

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を取得します。 enter image description here

21
Rentrop

これは、ストレート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"
3
hrbrmstr

回答の追加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)
0
arvi1000