我正在使用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的"内容标题"和"评论块"的两个节点。下面,我尝试使用标签"评论块"仅排除评论。
testpost <- AllandSundry_test %>%
html_node("#contentmiddle") %>%
html_node(":not(#commentblock)")
html_text() %>%
as.character()
当我运行这个时,结果只是日期 - 所有其余文本都消失了。有什么建议吗?
我花了很多时间寻找答案,但我是R(和html(的新手,所以如果这是显而易见的事情,我感谢您的耐心等待。
你快到了。您应该使用 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] "nttMarntt3nt, Mar, 3, nttLet's go back to
#> commenting on the weathernttntt, 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>
您仍然需要稍微清理一下字符串。
看起来 GGamba 确实为您解决了它 - 但是,在我的机器中,我不得不在#contentmiddle
后删除>.因此,本节改为:
html_nodes("#contentmiddle:not(#commentblock)")
祝你好运!耶西