我试图提取包含阿拉伯诗的表格。你可以在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)
答案 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
个标记,请使用font
。 Here's a fun tutorial on CSS selectors, if you like.
"p.poem, font.poem"