有没有办法在html_attr()
使用OR?在这个MRE中,我只希望节点有" drink"或"食物"属性。
也就是说,通过以下数据,我想做mydata %>% html_nodes("mynode") %>% html_attr("drink" or "food" otherwise skip)
之类的事情,并获得:
[1] "tea" "coffee" "egg" "toast"
> mydata
{xml_document}
<allitems>
[1] <mynode drink="tea"/>
[2] <mynode dessert="cookie"/>
[3] <mynode drink="coffee"/>
[4] <mynode spice="pepper"/>
[5] <mynode food="egg"/>
[6] <mynode food="toast"/>
我可以在不分别提取饮料和食物属性,组合载体和去除NA的情况下这样做吗?
答案 0 :(得分:2)
我打算建议使用xml2
包,我认为这是rvest
的依赖。
通过使用HTML
package::htmltools
来实现可重现性
a <- htmltools::HTML(
'<mynode drink="tea"/>
<mynode dessert="cookie"/>
<mynode drink="coffee"/>
<mynode spice="pepper"/>
<mynode food="egg"/>
<mynode food="toast"/>')
现在使用xpath
选择器,我们可以使用属性或food
或drink
提取所有节点。
> read_html(a) %>% xml_find_all('//*[@food or @drink]')
{xml_nodeset (4)}
[1] <mynode drink="tea"></mynode>
[2] <mynode drink="coffee"></mynode>
[3] <mynode food="egg"></mynode>
[4] <mynode food="toast"></mynode>
要获取属性值:
> read_html(a) %>% xml_find_all('//*[@food or @drink]') %>%
xml_attrs() %>% unlist(use.names = FALSE)
[1] "tea" "coffee" "egg" "toast"