r - 将循环拆分为子循环

标签 r json loops web-scraping

我在 R 中有一个循环,它每分钟从 API 中增量抓取 Reddit 评论(例如,从现在到 1 分钟前、1 分钟前和 2 分钟前、2 分钟前和 3 分钟之间包含某个关键字的所有评论)分钟前等):

library(jsonlite)

part1 = "https://api.pushshift.io/reddit/search/comment/?q=trump&after="    
part2 = "m&before="
part3 = "m&size=500"

results = list()
for (i in 1:526000)
{tryCatch({
    {
        url_i<-  paste0(part1, i+1,  part2, i,  part3)
        r_i <-  data.frame(fromJSON(url_i))
        results[[i]] <- r_i

myvec_i <- sapply(results, NROW)

print(c(i, sum(myvec_i))) 
       
       
    }
}, error = function(e){})
}
final = do.call(rbind.data.frame, results)
saveRDS(final, "final.RDS")

我想分割这个循环,以便它以 20000 次迭代的分段运行,保存每个分段,然后继续下一个分段。

这是我正在使用的代码:

index = seq(1, 526000, by = 20000)

max = as.numeric(length(index) -1 )

###########################################

results = list()

for (i in 1:max)
    
{tryCatch({
    
    {
        start_i = index[i]
        
        end_i = index[i+1]
        
        
        url_i<-  paste0(part1, end_i,  part2, start_i,  part3)
        
        resource_i <-  data.frame(fromJSON(url_i))
        
        results[[i]] <- r_i
        
        myvec_i <- sapply(results, NROW)
        print(c(i, sum(myvec_i)))
        
    }
    
}, error = function(e){})
    
    final_i = do.call(rbind.data.frame, results)
    title_i = paste0("file_", i, ".RDS")
    saveRDS(final_i, title_i )
    
}

我不确定我是否正确地执行了此操作 - 有人可以告诉我如何正确执行此操作吗?

谢谢!

最佳答案

如果逻辑是循环每个 block ,则获取序列(“索引”),创建“开始”作为索引,“结束”是删除第一个元素并附加 526000(作为索引)后从 1 减去 1最后一个元素是 520001。循环 'start' 序列,从该索引中提取相应的 'start', 'end' (start_i, end_i),然后循环start_i:end_i 之间的序列并应用代码,同时将输出附加到 result list

 index <- seq(1, 526000, by = 20000)
  start <- index
  end <- c(index[-1] - 1, 526000)
  
   
  part1 <- "https://api.pushshift.io/reddit/search/comment/?q=trump&after="    
  part2 <- "m&before="
  part3 <- "m&size=500"
  results <- list()
   
for(i in seq_along(start)) {
    
   
    
           start_i <- start[i]
           end_i <- end[i]
           for(j in start_i:end_i) {  
             tryCatch({         
        
        
                   url_j<-  paste0(part1, j+1,  part2, j,  part3)
        
                    resource_j <-  data.frame(fromJSON(url_j))
        
                    results[[j]] <- resource_j
        
                    myvec_j <- sapply(results, NROW)
                    print(c(j, sum(myvec_j)))
                
                
    
                }, error = function(e){
              })
    
                final_j = do.call(rbind.data.frame, results)
                title_j = paste0("file_", j, ".RDS")
                saveRDS(final_j, title_j )
    
                }
                
    }

关于r - 将循环拆分为子循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73857166/

相关文章:

r - ggplot2:在离散轴上显示每第 n 个值

R-Cran 尝试将属性更改为 NULL Smote

android - 在Firebase-Realtime Database上使用什么规则让用户注册和登录?

javascript - Mongoose 返回 Mongo 对象,但无法访问其属性

c++ - Visual C++ - 运行时检查失败 #3 - 变量未初始化

linux - 虽然读取行非常慢

r - 在 R 中创建空对象

r - R 和 WEKA 上的支持向量机

javascript - 使用 Node.js 将对象添加到 JSON

python - 遍历 numpy.array 的任意维度