根据特定模式抓取多个段落
Scrape multiple paragraphs according to a specific pattern
本报网站在单独的 <p>
对象中列出其文章的段落,其中每个 <class>
属性的名称以单词 article.
如何从 tz2 对象中获取 <class>
属性以 article 开头的所有段落?
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 简单一点。对于 classes,一般语法是 tag.class
,如果缺少某些内容,它会匹配所有内容,因此 .article
会匹配每个带有 class article
的标签。选择器之间的 space 表示寻找与第二部分的选择器匹配的第一部分的 children。所以:
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."
请注意,这是有效的,因为 class 中的 HTML 由 space 分隔,因此 class="class1 class2"
将匹配 .class1
或 .class2
. Here's a great tutorial 如果您想了解有关 CSS 选择器的更多信息。
本报网站在单独的 <p>
对象中列出其文章的段落,其中每个 <class>
属性的名称以单词 article.
如何从 tz2 对象中获取 <class>
属性以 article 开头的所有段落?
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 简单一点。对于 classes,一般语法是 tag.class
,如果缺少某些内容,它会匹配所有内容,因此 .article
会匹配每个带有 class article
的标签。选择器之间的 space 表示寻找与第二部分的选择器匹配的第一部分的 children。所以:
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."
请注意,这是有效的,因为 class 中的 HTML 由 space 分隔,因此 class="class1 class2"
将匹配 .class1
或 .class2
. Here's a great tutorial 如果您想了解有关 CSS 选择器的更多信息。