该报纸网站在单独的<p>
对象中列出了其文章的段落,其中每个<class>
属性的名称均以文章一词开头。
如何从tz2对象中获得<class>
属性以文章开头的所有段落?
require(rvest)
url = 'http://taz.de/Kongo-Kunst-im-Bruesseler-Afrikamuseum/!5563620/'
tz = read_html(url)
tz2 = tz %>%
xml_nodes(xpath = "//*[@class='sectbody']") %>%
xml_children()
我的尝试:
# get one paragraph by class attribute
tz2 %>%
xml_nodes(xpath = "//p[@class='article first odd Initial']") %>%
xml_text()
# regex-like get all 'article' paragraphs
tz2 %>%
xml_nodes(xpath = "//p[@starts-with(@class, 'article')]") %>%
xml_text()
最佳答案
CSS选择器比XPath更简单。对于类,常规语法为tag.class
,如果缺少某些内容,则它匹配所有内容,因此.article
匹配具有类article
的每个标记。选择器之间的空格意味着寻找与第二个选择器匹配的第一部分的子代。所以:
library(rvest)
tz <- read_html('http://taz.de/Kongo-Kunst-im-Bruesseler-Afrikamuseum/!5563620/')
paragraphs <- tz %>% html_nodes('.sectbody p.article') %>% html_text()
str(paragraphs)
#> chr [1:20] "TERVUREN taz | Wer dieses Jahr Belgiens berühmtes Afrikamuseum in Tervuren vor den Toren Brüssels besucht, kom"| __truncated__ ...
paragraphs[1]
#> [1] "TERVUREN taz | Wer dieses Jahr Belgiens berühmtes Afrikamuseum in Tervuren vor den Toren Brüssels besucht, kommt ins Staunen. Wo früher das Musée royal d’Afrique Centrale (MRAC) alte Kolonialsammlungen darbot, zelebriert heute das renovierte „Africa Museum“, wie es jetzt heißt, den Reichtum des Kongo mit all seinen hellen und dunklen Seiten."
请注意,这是可行的,因为HTML中的类用空格隔开,因此
class="class1 class2"
将匹配.class1
或.class2
。 Here's a great tutorial如果您想了解有关CSS选择器的更多信息。
关于r - 根据特定模式抓取多个段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54271713/