R语言用for循环批量爬取URL列表仅返回最后一页如何解决?
问题根因
你的代码中PoliticalArticles变量在每次for循环中都会被重新赋值为当前单页的爬取结果,上一轮循环的结果会被直接覆盖,因此循环结束后仅保留最后一页的数据。
修正后可实现批量爬取的代码
library(rvest) library(dplyr) GitHubpoliticsconversions <- "https://raw.githubusercontent.com/lukanius007/web_scraping_politics/main/politics_conversions.csv" CSVFile <- read.csv(GitHubpoliticsconversions, header = TRUE, sep = ",") # 提取所有URL StoryLink <- pull(CSVFile, 4) # 初始化结果列表,长度和URL数量一致,提前分配空间提升运行效率 PoliticalArticles <- vector("list", length = length(StoryLink)) # 遍历所有URL爬取 for(i in seq_along(StoryLink)){ # 单次请求间隔1秒,避免触发网站反爬规则 Sys.sleep(1) # 读取当前页 ArticlePage <- read_html(StoryLink[i]) # 提取目标文本 articleText <- ArticlePage %>% html_elements(".lead , .article__title") %>% html_text() # 将当前页结果存入对应位置,不覆盖之前的内容 PoliticalArticles[[i]] <- articleText } # 可选:如果需要把所有结果合并为一个字符向量,执行下面的代码 # PoliticalArticles_all <- unlist(PoliticalArticles) # 可选:如果需要整理为带文章序号的数据框,执行下面的代码 # PoliticalArticles_df <- data.frame( # 文章序号 = rep(1:length(PoliticalArticles), times = sapply(PoliticalArticles, length)), # 内容 = unlist(PoliticalArticles) # )
如果运行时出现请求报错,可以适当调大Sys.sleep()的秒数,降低请求频率。
内容的提问来源于stack exchange,提问作者manoj rasika
相关产品推荐
相关产品推荐

