【问题标题】:How to create a "for loop" in R which can web scrape data from each URL from a list of URLs?如何在 R 中创建一个“for 循环”,它可以从 URL 列表中的每个 URL 中抓取数据?
【发布时间】:2021-11-30 08:14:39
【问题描述】:

我在 Git Hub 页面上有一个数据集。 我将它们作为 CSV 文件导入到 Rstudio,并创建了一个名为“StoryLink”的 URL 数组 现在我想从每个网页中抓取数据。 所以我创建了一个for循环并将所有收集到的数据分配给一个名为“articleText”的变量,并将其转换为一个名为“ArticlePage”的字符数组

我的问题是,即使我创建了一个 for 循环,它也只会 抓取 URL 列表中的最后一个网页(第 6 篇文章)。 我如何抓取所有网址?

library(rvest)
library(dplyr)

GitHubpoliticsconversions<-  "https://raw.githubusercontent.com/lukanius007/web_scraping_politics/main/politics_conversions.csv"

CSVFile <- read.csv(GitHubpoliticsconversions, header = TRUE, sep = ",")

StoryLink <- c(pull(CSVFile, 4))

page <- {}

for(i in 1:6){
page[i] <- c(StoryLink[i])

ArticlePage <- read_html(page[i]) 

articleText = ArticlePage %>% html_elements(".lead , .article__title") %>% html_text()
PoliticalArticles <- c(articleText)

}

这是我从这段代码中得到的结果,但我需要所有网页的结果都一样

>PoliticalArticles
[1] "Wie es zur Hausdurchsuchung bei Finanzminister Blümel kam"                                                                                                                                 
[2] "Die Novomatic hatte den heutigen Finanzminister 2017 um Hilfe bei Problemen im Ausland gebeten – und eine Spende für die ÖVP angeboten. Eine solche habe er nicht angenommen, sagt Blümel."
>

【问题讨论】:

  • 这有帮助吗? stackoverflow.com/a/27153589/6851825您当前正在创建一个对象 PolitialArticles,并在每次循环迭代时覆盖它。最后,它只是最近分配的迭代。

标签: r for-loop web-scraping dplyr rvest


【解决方案1】:

您需要以可以逐渐增长的数据格式存储检索到的网站数据,例如一个列表。

您可以使用i 作为列表命名,将元素分配给 for 循环中的(先前创建的)列表。在下面的示例中,我们只是将每个 2*i 计算的结果存储在 data_list 中。然后可以通过简单地访问列表元素来检索结果,例如data_list[1]

data_list <- list()

for (i in 1:10) {
data_list[i] <- 2*i
}

data_list

data_list[1]

在您的示例中,您可以执行完全相同的操作。注意我稍微更改了您的代码并简化了它。我遍历您的网站列表,所以i 基本上是每个网址。然后将结果存储在一个列表中,如上所述,该列表的大小逐渐增长,可以通过pages[1]或相应的urlpages["https://www.diepresse.com/5958204"]访问

library(rvest)
library(dplyr)

GitHubpoliticsconversions<-  "https://raw.githubusercontent.com/lukanius007/web_scraping_politics/main/politics_conversions.csv"

CSVFile <- read.csv(GitHubpoliticsconversions, header = TRUE, sep = ",")

StoryLink <- c(pull(CSVFile, 4))

pages <- list()

for(i in StoryLink){

ArticlePage <- read_html(i)

articleText = ArticlePage %>% html_elements(".lead , .article__title") %>% html_text()
pages[[i]] <- c(articleText)

}

【讨论】:

  • 非常感谢。这种方式非常完美,因为我不仅可以将文本作为一个整体提取,还可以单独提取文章,并且可以允许列表逐步增长,我是编程新手,非常感谢您以一种可以理解的方式进行澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 2022-12-03
相关资源
最近更新 更多