2017-08-02 19 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

相关问题