-2

我正在尝试抓取这样的网页。我一直在与 Rvest 合作。

该页面显示了几个生物医学文献引用。每个引用项目都包含一个指向源的链接、一个包含一些结构化信息的表,在某些情况下,还有一个名为“Notes”的块引用,其中包含一些非结构化信息。

我想提取每个引用并单独处理它。但是,每个引用的链接、表格和块引用元素不在一个 div 中,它们只是堆叠在下一个引用的同一组元素上。我不能单独提取每个元素,因为有时块引用不存在,所以它们不会匹配。

如何使用 Rvest 解决这个问题?但是,在每次引用之后都有一个 hr 标签。有没有办法使用 hr 标签将 xml_nodeset 类拆分为项目列表?

4

2 回答 2

0

我做了rvest一些数据清理。希望它能为您概括:

library(rvest)
library(dplyr)

获取网址:

url<html('http://examine.com/rubric/effects/view/552/Symptoms+of+Irritable+Bowel+Syndrome/all/')

每项研究的标题都保存在<a>网络链接包装器中。获取这些并清理换行符。添加一些研究并放入一个df。

selector_name<-"a"
titles<-html_nodes(url, selector_name) %>% html_text()
titles <- gsub("[\r\n\t]", "", titles)
titles <- as.data.frame(titles)
titles$studyno <- 1:nrow(titles)

正如您所指出的,内容位于表格中,因此请使用<td>包装器获取信息并清除换行符:

selector_name<-"td"
content<-html_nodes(url, selector_name) %>% html_text()
content <- gsub("[\r\n\t]", "", content)

然后清理一下并match获得df:

df <- as.data.frame(matrix(content, ncol=2, byrow=T))
df$studyno <- cumsum(df$V1=="Change of Effect")

df$title <- titles$titles[match(df$studyno, titles$studyno)]

 head(df,7)

#                  V1                                              V2 studyno
#1   Change of Effect                                       decrease        1
#2       Trial Design                                            meta       1
#3       Trial Length                                              na       1
#4 Number of Subjects                                             392       1
#5             Gender                                           mixed       1
#6   Change of Effect Decrease   (Statistically Significant, p-value        2
#7       Trial Design                                    Double Blind       2
                                                                                                                                  #title
#1 Effect of fibre, antispasmodics, and peppermint oil in the treatment ...
#2 Effect of fibre, antispasmodics, and peppermint oil in the treatment ...
#3 Effect of fibre, antispasmodics, and peppermint oil in the treatment ...
#4 Effect of fibre, antispasmodics, and peppermint oil in the treatment ...
#5 Effect of fibre, antispasmodics, and peppermint oil in the treatment ...
#6 Treatment Of Irritable Bowel Syndrome With Peppermint Oil. A Double-...
#7 Treatment Of Irritable Bowel Syndrome With Peppermint Oil. A Double-...
于 2015-05-26T18:17:57.520 回答
0

您可以使用正则表达式。首先,将 HTML 代码保存到 string_input。

首先,让我们提取所有链接(我猜它们在 content= 和 > 之间,否则只需更改它即可)

library(stringr)
vector_links <- str_extract_all(string_input, "content=(.+?)>")

vector_links 的每个元素都包含一个链接。让我们只提取 url。

char_link <- vector_links[[1]]
vector_links <- lapply(vector_links, function(char_link){
  substring(char_link, 9, nchar(char_link) - 3)
})
于 2015-05-26T18:19:41.767 回答