2017-08-02 28 views
0

我是新來的rvest。如何在標籤中提取具有2個類名稱或只有1個類名的元素?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選擇器:

選擇類包含b1a1

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語法還是':'可以和其他標籤/類/ ID一起使用? – addicted

+1

「不」意思是字面意思。即該類不應該在括號中包含類,是的,你可以像標籤名和id一樣使用它'span.b1:not(.a1)'。你可以查看[這裏](https://stackoverflow.com/questions/1028248/how-to-combine-class-and-id-in-css-selector)以獲取更多信息。 – Psidom

+0

非常感謝!這3個選擇是非常有幫助的。 – addicted

相關問題