Очистите несколько абзацев в соответствии с определенной схемой - PullRequest
0 голосов
/ 20 января 2019

Веб-сайт этой газеты перечисляет пункты своей статьи в отдельных <p> объектах, где имя каждого атрибута <class> начинается со слова article .

Как мне получить все абзацы, где атрибут <class> начинается с article из объекта tz2?

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()

1 Ответ

0 голосов
/ 20 января 2019

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 Afri­kamuseum in Tervuren vor den Toren Brüssels besucht, kom"| __truncated__ ...

paragraphs[1]
#> [1] "TERVUREN taz | Wer dieses Jahr Belgiens berühmtes Afri­kamuseum 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. Вот отличное руководство , если вы хотите больше узнать о CSS-селекторах.

...