r - 根据特定模式抓取多个段落

标签 r xpath web-scraping html-parsing rvest

该报纸网站在单独的<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 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.class2Here's a great tutorial如果您想了解有关CSS选择器的更多信息。

关于r - 根据特定模式抓取多个段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54271713/

相关文章:

回归表中的引用类别

r - R中多边形上的叠加点

java - 如何使用selenium在java中识别并点击这个span?

r - 计算R数据框中两个纬度和经度地理坐标之间的距离

r - 将多个数据帧写入同一个 json 对象

node.js - 在 Puppeteer 中单击带有特定文本的内部元素的外部元素

javascript - Puppeteer:搜索不区分大小写的内部文本

python - Scrapy - 连接以非干净的方式丢失。跨单个域不一致

url - 使用 Floki 和 HttPotion 的 Elixir 脚本无法解析 url

java - 从 HTML 中的多个 a 标签获取数据