首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除节点RVest

排除节点RVest
EN

Stack Overflow用户
提问于 2017-03-27 04:43:15
回答 2查看 3.2K关注 0票数 4

我正在使用RVest抓取博客文本,并且很难找到一种排除特定节点的简单方法。如下所示为文本:

代码语言:javascript
复制
AllandSundry_test <- read_html
("http://www.sundrymourning.com/2017/03/03/lets-go-back-to-commenting-on-the-weather/")

testpost <- AllandSundry_test %>% 
html_node("#contentmiddle") %>%
html_text() %>%
as.character()

我想用ID的“内容标题”和“评论块”排除这两个节点。下面,我试着排除使用“注释块”标签的评论。

代码语言:javascript
复制
 testpost <- AllandSundry_test %>% 
   html_node("#contentmiddle") %>%
   html_node(":not(#commentblock)")
   html_text() %>%
   as.character()

当我运行这个程序时,结果就是日期--所有剩下的文本都消失了。有什么建议吗?

我花了很多时间寻找答案,但我对R(和html)并不熟悉,所以如果这是显而易见的事情,我很感激你的耐心。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-03 09:52:53

你差点就到了。您应该使用html_nodes而不是html_node

html_node检索它遇到的第一个元素,而html_nodes将页面中的每个匹配元素作为列表返回。

toString()函数将字符串列表折叠为一个字符串。

代码语言:javascript
复制
library(rvest)

AllandSundry_test <- read_html("http://www.sundrymourning.com/2017/03/03/lets-go-back-to-commenting-on-the-weather/")

testpost <- AllandSundry_test %>% 
  html_nodes("#contentmiddle>:not(#commentblock)") %>% 
  html_text %>%
  as.character %>%
  toString

testpost
#> [1] "\n\t\tMar\n\t\t3\n\t, Mar, 3, \n\t\tLet's go back to 
#> commenting on the weather\n\t\t\n\t\t, Let's go back to commenting on 
#> the weather, Let's go back to commenting on the weather, I have just 
#> returned from the grocery store, and I need to get something off my chest. 
#> When did "Got any big plans for the rest of the day?" become 
#> the default small ...<truncated>

你还需要清理一下绳子。

票数 4
EN

Stack Overflow用户

发布于 2018-06-27 17:41:35

看起来GGamba确实为您解决了这个问题--但是,在我的机器中,我不得不在#contentmiddle之后删除>。因此,这一节反而是:

代码语言:javascript
复制
html_nodes("#contentmiddle:not(#commentblock)")

祝你好运!杰西

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

https://stackoverflow.com/questions/43038101

复制
相关文章

相似问题

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