【问题标题】:For loop - doesn't work properlyFor 循环 - 无法正常工作
【发布时间】:2017-11-11 14:50:21
【问题描述】:

我正在尝试使用 Indeed API 来搜索特定的工作,当 for 循环没有经过每次迭代时,我遇到了一个问题。 这是我使用的代码示例:

original_url_1 <- "http://api.indeed.com/ads/apisearch?publisher=750330686195873&format=json&q="
original_url_2 <-"&l=Canada&sort=date&radius=10&st=&jt=&start=0&limit=25&fromage=3&filter=&latlong=1&co=ca&chnl=&userip=69.46.99.196&useragent=Mozilla/%2F4.0%28Firefox%29&v=2" 
keywords <- c("data+scientist", "data+analyst")

for(i in keywords) { 
    url <- paste0(original_url_1,i,original_url_2)
    x <- as.data.frame(jsonlite::fromJSON(httr::content(httr::GET(url),
                                    as = "text", encoding = "UTF-8")))
     data <- rbind(data, x)
 }

Url 指向 JSON 文件,将关键字之一添加到 url 将更改 JSON 文件。因此,我尝试对所有关键字重复此操作,并将结果存储在数据框中。但是,当我尝试使用更多关键字时,我只得到了几个第一个关键字的结果。

【问题讨论】:

  • 小问题:url &lt;- paste0(original_url,"/",i)
  • 感谢您的回复。我刚刚修改了答案以显示原始网址 - 我实际上是在网址中间插入这些关键字。
  • 小心名字。我适当地编辑了代码...
  • 你还需要初始化对象之前使用它们进入一个循环。出于这个原因,我发布了一个答案

标签: json r for-loop


【解决方案1】:
 original_url_1 <- "http://api.indeed.com/ads/apisearch?publisher=750330686195873&format=json&q="
 original_url_2 <-"&l=Canada&sort=date&radius=10&st=&jt=&start=0&limit=25&fromage=3&filter=&latlong=1&co=ca&chnl=&userip=69.46.99.196&useragent=Mozilla/%2F4.0%28Firefox%29&v=2" 
 keywords <- c("data_scientist", "data+analyst")

 data<-data.table(NULL)#initialization of object

 for(i in keywords) { 
   url <- paste0(Original_url_1,i,Original_url_2)
   x <- as.data.frame(jsonlite::fromJSON(httr::content(httr::GET(url),as = "text", encoding = "UTF-8")))
   data <- rbind(data, x)
}

>dim(data)
[1] 39 31

【讨论】:

  • 再次感谢!我真的很感谢你的帮助。我确实在我的代码中指定了对象,只是忘记将它添加到答案中!当我得到一些结果时,我认为问题出在循环本身,它只是不想对所有关键字进行迭代——它只是在某个点停止。我只是在想问题可能是当某些关键字没有显示任何结果时,它只会抛出错误并且循环将停止。我可能只需要添加一个 IF 语句,然后再试一次。你怎么看?
  • 或者它可能是不允许像许多请求一样的 API。尝试sleep() 以在 N 次后暂停循环。关于您的上述评论,stackoverflow.com/questions/23139357/…
  • 只需使用 tryCatch() 函数重新运行代码即可!所以问题是如果发生错误,循环就会停止。感谢您的所有帮助!
  • 您可能想要充分编辑答案,并结合您所做的更改...
【解决方案2】:

这是正确的代码:

original_url_1 <- "http://api.indeed.com/ads/apisearch?publisher=750330686195873&format=json&q="
original_url_2 <-"&l=Canada&sort=date&radius=10&st=&jt=&start=0&limit=25&fromage=3&filter=&latlong=1&co=ca&chnl=&userip=69.46.99.196&useragent=Mozilla/%2F4.0%28Firefox%29&v=2" 
keywords <- c("data+scientist", "data+analyst")

data <- data.frame()

for (i in keywords) {
  tryCatch({url <- paste0(original_url_1,i,original_url_2)
  x <- as.data.frame(jsonlite::fromJSON(httr::content(httr::GET(url),
                                                     as = "text", encoding = "UTF-8")))
  data <- rbind(data, x)
  }, error = function(t){})
}

【讨论】:

  • 没有右括号for (i in keywords){
  • 它在那里,只是没有突出显示为代码 - 所以右括号在代码下方。感谢您指出了这一点。固定!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2013-06-26
  • 2016-01-01
  • 2021-09-26
  • 2020-10-27
  • 2012-01-02
相关资源
最近更新 更多