首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据特定模式刮除多个段落

根据特定模式刮除多个段落
EN

Stack Overflow用户
提问于 2019-01-19 21:52:11
回答 1查看 247关注 0票数 1

这家报纸网站在单独的<p>对象中列出文章的段落,每个<class>属性的名称都以文章一词开头。

如何从<class>对象获取<class>属性以项目开头的所有段落?

代码语言:javascript
运行
复制
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()

我的尝试:

代码语言:javascript
运行
复制
# 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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-19 22:07:07

CSS选择器比XPath简单一点。对于类,一般语法是tag.class,如果缺少什么,它就匹配所有东西,所以.article将每个标记与类article匹配。选择器之间的空格意味着查找与第二部分的选择器匹配的第一部分的子部分。所以:

代码语言:javascript
运行
复制
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选择器的信息。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54271713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档