如何加快Loop的API调用

时间:2019-03-05 13:19:59

标签: r api for-loop

我最近编写了一个脚本,以便通过API调用查找搜索量。

这是我使用的脚本:

install.packages("SEMrushR")
library(SEMrushR)

#Data frame to append data

final_result_useo_rumbo <- data.frame()
mes_keywords_to_check <- readLines("useo_rumbo_es.txt") 
mes_keywords_to_check <- as.character(mes_keywords_to_check)

#Loop in order to look for each keyword that is in my list, then return Search volume thanks to the API call and finally store it in a new database.

for (i in 1:length(mes_keywords_to_check)) {
  test_keyword <- as.character(mes_keywords_to_check[i])
    df_test_2 <- keyword_overview_all(test_keyword, "es","API KEY")  
  final_result_useo_rumbo <- rbind(final_result_useo_rumbo,df_test_2)
}

脚本运行正常,但是问题是我要检查很多关键字(800 000)。 当我为6万个关键字完成搜索时,花了将近4个小时才完成...

您知道我可以如何加快这一过程吗?有没有更好的方法来编写脚本?

1 个答案:

答案 0 :(得分:1)

您可以尝试用for函数替换apply循环:

result <- sapply(mes_keywords_to_check, function(x) {
    keyword_overview_all(x, "es", "API KEY")
})

然后,如果您要数据框而不是矩阵,则可以data.frame进行上述操作:

result <- data.frame(result)

或者进行移调:

result <- data.frame(t(result))

您无需在as.character中的每个条目上调用mes_keywords_to_check,因为在循环之前(或调用apply,您已经将整个矢量转换为字符了(在上述情况下,则是rbind调用) )。另外,您可能还不需要在循环的每次迭代中调用{{1}}。相反,让R为您汇总数据,然后担心在循环/应用完成之后该怎么做。