排除节点RVest

时间:2017-03-27 04:43:16

标签: r web-scraping rvest

我正在使用RVest抓取博客文本,并且正在努力想出一种排除特定节点的简单方法。以下文字:

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&#34; contenttitle&#34;排除这两个节点。和&#34; commentblock&#34;。下面,我尝试使用标记&#34; commentblock&#34;。

排除评论
 testpost <- AllandSundry_test %>% 
   html_node("#contentmiddle") %>%
   html_node(":not(#commentblock)")
   html_text() %>%
   as.character()

当我运行它时,结果只是日期 - 文本的其余部分都消失了。有什么建议吗?

我花了很多时间寻找答案,但我是R(和html)的新手,所以如果这很明显,我感谢你的耐心。

2 个答案:

答案 0 :(得分:1)

你快到了。您应该使用html_nodes代替html_node

html_node检索遇到的第一个元素,而html_nodes将页面中的每个匹配元素作为列表返回。
toString()函数将字符串列表折叠为一个。

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>

你仍然需要清理一下字符串。

答案 1 :(得分:0)

肯定看起来GGamba为您解决了它-但是,在我的机器中,我必须在#contentmiddle之后删除>。因此,该部分改为:

html_nodes("#contentmiddle:not(#commentblock)")

祝你好运! 杰西