使用xpathSApply的相同代码搜索多个路径

时间:2016-09-30 21:01:23

标签: html r xpath html-parsing

我试图提取包含阿拉伯诗的表格。你可以在here

中查看这首诗

我试图解析表格......

URL <- "http://www.adab.com/modules.php?name=Sh3er&doWhat=shqas&qid=65546&r=&rc=1"
Data <- htmlTreeParse(URL, useInternalNodes = TRUE,encoding = "Windows-1256")
Poem <- xpathSApply(Data,"//p[@class='poem']",xmlValue)
Poem1 <- xpathSApply(Data,"//font[@class='poem']",xmlValue)
Encoding(Poem) <- "UTF-8"
Encoding(Poem1) <- "UTF-8"

但这并不好,因为我改变了写诗的顺序。

那么,有没有办法让这个表只使用一个代码来获取它在URL中写的?

例如:

 Poem <- xpathSApply(Data,"//p[@class='poem']&//font[@class='poem']",xmlValue)

1 个答案:

答案 0 :(得分:2)

问题实际上是关于适当的选择器用一类“诗”来抓取多个标签。有几个选择。一个简单的选项是在XPath选择器中使用通配符*作为标记名称:

Poem <- xpathSApply(Data,"//*[@class='poem']",xmlValue)

如果您只想要p类的font"poem"标签,而不是同一类的div标签,则可以使用{{1 (或)运算符选择多个选项。转换为|,我发现它更容易阅读(尽管同样的选择器在rvest中工作正常):

xpathSApply

使用library(rvest) Poem <- URL %>% read_html() %>% html_nodes(xpath = '//p[@class="poem"] | //font[@class="poem"]') %>% html_text(trim = TRUE) 时的另一个选择是使用CSS选择器而不是XPath选择器。在CSS中,类由rvest指定,因此通配符版本所需的只是.;要限制为".poem"p个标记,请使用fontHere's a fun tutorial on CSS selectors, if you like.

"p.poem, font.poem"