Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html rvest-在1个标记中刮取2个类_Html_R_Web Scraping_Scrape_Rvest - Fatal编程技术网

Html rvest-在1个标记中刮取2个类

Html rvest-在1个标记中刮取2个类,html,r,web-scraping,scrape,rvest,Html,R,Web Scraping,Scrape,Rvest,我是个新手。如何提取标记中有2个类名或只有1个类名的元素 这是我的代码和问题: doc <- paste("<html>", "<body>", "<span class='a1 b1'> text1 </span>", "<span class='b1'> text2 </span>", "</body>

我是个新手。如何提取标记中有2个类名或只有1个类名的元素

这是我的代码和问题:

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

有人可以帮忙吗?

您可以使用css选择器,如下所示:

选择类包含
b1
a1

read_html(doc) %>% html_nodes(".b1:not(.a1)")
# {xml_nodeset (1)}
# [1] <span class="b1"> text2 </span>
read\u html(doc)%%>%html\u节点(“.b1:非(.a1)”)
#{xml_nodeset(1)}
#[1]文本2
或者使用属性选择器:

read_html(doc) %>% html_nodes("[class='b1']")
# {xml_nodeset (1)}
# [1] <span class="b1"> text2 </span>
read\u html(doc)%>%html\u节点(“[class='b1']”)
#{xml_nodeset(1)}
#[1]文本2
选择类包含以下两个部分:

read_html(doc) %>% html_nodes(".a1.b1")
# {xml_nodeset (1)}
# [1] <span class="a1 b1"> text1 </span>
read\u html(doc)%>%html\u节点(“.a1.b1”)
#{xml_nodeset(1)}
#[1]文本1

谢谢!对于第一个解决方案,什么是
:not()
?它是1语法还是
可以与其他标记/类/id一起使用?
不是
的字面意思。i、 e..类不应在括号中包含类,是的,您可以将其与标记名和id一起使用,如
span.b1:not(.a1)
。你可以查看更多信息。
read_html(doc) %>% html_nodes(".a1.b1")
# {xml_nodeset (1)}
# [1] <span class="a1 b1"> text1 </span>