gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:32:31 26 4
gpt4 key购买 nike

我正在尝试提取包含一首阿拉伯诗的表格。您可以在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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com