使用R从csv文件中抓取多个网址

时间:2020-04-20 12:56:53

标签: r csv web-scraping

我有一个CSV文件,其中包含有关一组文章的信息,第9卷涉及URL。我已经使用以下代码通过单个URL成功地抓取了标题和摘要:

library('rvest')
url <- 'https://link.springer.com/article/10.1007/s10734-019-00404-5'
webpage <- read_html(url)

title_data_html <- html_nodes(webpage,'.u-h1')
title_data <- html_text(title_data_html)
head(title_data)

abstract_data_html <- html_nodes(webpage,'#Abs1-content p')
abstract_data <- html_text(abstract_data_html)
head(abstract_data)

myTable = data.frame(Title = title_data, Abstract = abstract_data)
View(myTable)

现在,我想使用R来抓取每篇文章的标题和摘要。我的问题是如何导入CVS文件中包含的URL,以及如何编写for循环来抓取我需要的数据。我是新来的人,所以在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试一下:

library(rvest)

URLs <- read.csv("urls.csv")
n <-nrow(URLs)
URLs2 <-character()

for (i in 1:n) {
  URLs2[i]<-as.character(URLs[i,1])

}

df <- data.frame(Row = as.integer(), Title=as.character(), Abstract=as.character(), stringsAsFactors = FALSE)

for (i in 1:n) {
  webpage <- tryCatch(read_html(URLs2[i]), error = function(e){'empty page'})
  if (!"empty page" %in% webpage) {
  title_data_html <- html_nodes(webpage,'.u-h1')
  title_data <- html_text(title_data_html)
  abstract_data_html <- html_nodes(webpage,'#Abs1-content p')
  abstract_data <- html_text(abstract_data_html)
  temp <- as.data.frame(cbind(Row = match(URLs2[i], URLs2), Title = title_data, Abstract = abstract_data))
  if(ncol(temp)==3) {
    df <- rbind(df,temp)
  }
}
}

View(df)

编辑:对代码进行了编辑,即使URL损坏(跳过),它也可以工作。输出行将在csv中用条目的相应行号编号。

enter image description here