2017-08-02 9 views
0

私はrvestに新しいです。 2つのクラス名を持つ要素を抽出するにはどうすればよいですか?これは、私のマシンスペックであるrvest - 1タグの2つのクラスを掻き立てる

doc <- paste("<html>", 
      "<body>", 
      "<span class='a1 b1'> text1 </span>", 
      "<span class='b1'> text2 </span>", 
      "</body>", 
      "</html>" 
      ) 
library(rvest) 
read_html(doc) %>% html_nodes(".b1") %>% html_text() 
#output: text1, text2 
#what i want: text2 

#I also want to extract only elements with 2 class names 
read_html(doc) %>% html_nodes(".a1 .b1") %>% html_text() 
# Output that i want: text1 

オペレーションシステム:Windows 10

rvestバージョン:0.3.2

R version 3.3.3 (2017-03-06) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows >= 8 x64 (build 9200) 

これは私のコードと問題です

誰かが助けることができますか?次のように

答えて

1

あなたはCSSセレクタを使用することができます。

選択クラスがb1ないa1が含まれています

read_html(doc) %>% html_nodes(".b1:not(.a1)") 
# {xml_nodeset (1)} 
# [1] <span class="b1"> text2 </span> 

または属性セレクタを使用します。

read_html(doc) %>% html_nodes("[class='b1']") 
# {xml_nodeset (1)} 
# [1] <span class="b1"> text2 </span> 

選択クラスは両方が含まれています

read_html(doc) %>% html_nodes(".a1.b1") 
# {xml_nodeset (1)} 
# [1] <span class="a1 b1"> text1 </span> 
+0

ありがとう!あなたの最初の解決策は、 ':not()'とは何ですか?それは1つの構文ですか、 ':'は他のタグ/クラス/ idsと一緒に使用できますか? – addicted

+1

'not'は文字通り意味します。すなわち、クラスは括弧内にクラスを含むべきではありません。はい、 'span.b1:not(.a1)'のようなタグ名とIDでそれを使用できます。詳細は[こちら](https://stackoverflow.com/questions/1028248/how-to-combine-class-and-id-in-css-selector)で確認できます。 – Psidom

+0

ありがとうございます!これらの3つの選択肢は非常に役に立ちます。 – addicted

関連する問題