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

标签 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)

最佳答案

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

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

如果您只需要 "poem" 类的 pfont 标签,但不需要,请使用 div 同一类的标签,可以使用|(或)运算符来选择多个选项。翻译为 rvest,我发现它更容易阅读(尽管相同的选择器在 xpathSApply 中也可以正常工作):

library(rvest)

Poem <- URL %>% read_html() %>% 
    html_nodes(xpath = '//p[@class="poem"] | //font[@class="poem"]') %>% 
    html_text(trim = TRUE)

如果使用 rvest,另一个选择是使用 CSS 选择器而不是 XPath 选择器。在 CSS 中,类由 . 指定,因此通配符版本只需要 ".poem";要仅限于 pfont 标记,请使用 "p.poem, font.poem"Here's a fun tutorial on CSS selectors, if you like.

Poem <- URL %>% read_html() %>% 
    html_nodes(css = '.poem') %>% 
    html_text(trim = TRUE)

head(Poem, 15)    # I don't speak Arabic, so check that the results make sense
##  [1] "أقداح و أحلام"             "أنا لا أزال و في يدي قدحي" "ياليل أين تفرق الشرب"     
##  [4] "ما زلت أشربها و أشربها"    "حتى ترنح أفقك الرحب"       "الشرق عُفر بالضباب فما"    
##  [7] "يبدو فأين سناك يا غرب؟"    "ما للنجوم غرقن ، من سأم"   "في ضوئهن و كادت الشهب ؟"  
## [10] "أنا لا أزال و في يدي قدحي" "ياليل أين تفرق الشرب ؟"    "******"                   
## [13] "الحان بالشهوات مصطخب"      "حتى يكاد بهن ينهار"        "و كأن مصاحبيه من ضرج" 

关于html - 使用 xpathSApply 的相同代码搜索多个路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39800039/

相关文章:

javascript - 在 jQuery 中打开子菜单链接

xslt - 根据子节点属性值过滤节点的最简单 XSLT

xml - 比较来自不同 XML 文件的元素值并附加到第一个 XML

html - 固定缩略图比例大小并保持纵横比?

html - 在具有 BG 颜色的 div 顶部添加图像

javascript - 如何将随机化器的结果值插入到 html 输入值中? (JavaScript)

r - 如何使用变量填充ggplot shapefile map ?

r - 使用 rlang,将 `...` 的内容转换为字符向量

r - 错误: non-numeric argument to binary operator, but class is numeric

html - 为什么我的 XPath 查询(抓取 HTML 表)只能在 Firebug 中使用,而不能在我正在开发的应用程序中使用?