如何在 R 中创建一个 "for loop",它可以从 URL 列表中的每个 URL 中抓取数据?
How to create a "for loop" in R which can web scrape data from each URL from a list of URLs?
我在 Git 中心页面上有一个数据集。
我将它们作为 CSV 文件导入到 Rstudio,并创建了一个名为“StoryLink”的 URL 数组
现在我想从这些网页中获取 scrape 数据。
所以我创建了一个 for 循环并将所有收集的数据分配给一个名为“articleText”的变量并将其转换为一个名为“ArticlePage”的字符数组
我的问题是,即使我创建了一个 for 循环,它也只是 web scrape URL 列表中的最后一个网页(第 6 篇文章)。
我如何 抓取 所有 URL?
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."
>
您需要以可以逐渐增长的数据格式存储检索到的网站数据,例如一个列表。
您可以使用 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]
在您的示例中,您可以执行完全相同的操作。 N.b。我稍微修改了你的代码并简化了它。我遍历了你的网站列表,所以 i
基本上是每个网站 url。然后将结果按上述方式存储在一个列表中,该列表的大小逐渐增加,可以通过 pages[1]
或相应的 url pages["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)
}
我在 Git 中心页面上有一个数据集。 我将它们作为 CSV 文件导入到 Rstudio,并创建了一个名为“StoryLink”的 URL 数组 现在我想从这些网页中获取 scrape 数据。 所以我创建了一个 for 循环并将所有收集的数据分配给一个名为“articleText”的变量并将其转换为一个名为“ArticlePage”的字符数组
我的问题是,即使我创建了一个 for 循环,它也只是 web scrape URL 列表中的最后一个网页(第 6 篇文章)。 我如何 抓取 所有 URL?
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."
>
您需要以可以逐渐增长的数据格式存储检索到的网站数据,例如一个列表。
您可以使用 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]
在您的示例中,您可以执行完全相同的操作。 N.b。我稍微修改了你的代码并简化了它。我遍历了你的网站列表,所以 i
基本上是每个网站 url。然后将结果按上述方式存储在一个列表中,该列表的大小逐渐增加,可以通过 pages[1]
或相应的 url pages["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)
}