当多个节点或同级节点位于父节点<p></p><div>下时创建 data.frame

  • 本文关键字:节点 div frame data 创建 父节点 r
  • 更新时间 :
  • 英文 :


在下面的页面中,<div>元素下有多个段落,这导致在抓取页面时只打印第一个<p>

http://www.epilepsy.com/connect/forums/living-epilepsy-adults/anyone-else-w-connection-vietnam-war

我试着用下面的代码把所有的<p>元素加起来

content = html_text(html_node(h, 'div.field-item.even > p'))

但是当提取了所有的<p>时,不能保存数据帧(错误为"替换有6行,数据有1行")

有人知道如何解决这个问题吗?我感谢你的帮助。

dataf <- data.frame(title=c(), content=c())
dataf
post.num <- 1
for(link in article_href){
link = sprintf('http://www.epilepsy.com%s', link)
print(link)
h = read_html(link)
title = html_text(html_node(h, 'div.panel-pane.pane-node-title.no-title.block'))
title <- str_trim(title)
str_replace_all(title, '[[:space:]]', '')
print(title)

content = html_text(html_node(h, 'div.field-item.even > p'))
print(content)
dataf[post.num, 'content'] = content

post.num <- post.num + 1
}

如果您不关心文本内容中的格式,您可以只选择<p>的父节点:

library(dplyr)
library(rvest)
library(stringr)
h = read_html('http://www.epilepsy.com/connect/forums/living-epilepsy-adults/anyone-else-w-connection-vietnam-war')
title <- h %>% html_node('div.pane-node-title h2') %>% html_text(trim = TRUE)
print(title)
content <- h %>% html_node('.field-name-field-body') %>% html_text(trim = TRUE)
print(content)

最新更新