2016-08-12 3 views
0

링크가 포함 된 표를 사용하여 PDF를 다운로드하려고합니다. 일관성없는 링크 서식으로 인해 다른 열에있는 동일한 링크의 다른 버전을 만들었습니다. 사생활 보호를 위해 링크를 공개 할 수는 없지만 여기에는 내가 한 일이 있습니다. 모든 버전과 이름을 생성 한 후R을 사용하여 캐치를 시도하여 웹의 PDF를 다운로드하십시오.

links <- data.frame(links1,links2,links3,links4) 
filenames <- str_c(format(seq.Date(from = as.Date("2015-04-01"), 
           to = Sys.Date(), by = "day"),"%Y_%m_%d"),".pdf") 

는, 나는 여기 링크가 올바른없는에도 불구하고 계속 Try-Catch에 싸여 루프를 작성하려고합니다. 내 목표는 열 links$links1[3]에있는 링크가 동일한 행의 다른 열을보고 작동 링크를 찾지 못하는 경우입니다. 자사의 2015 년 및 가능한 다른 날짜도 4 월 9 일에 업로드 된 PDF 파일을 따기하지 어떤 이유

for (i in seq_along(links[,1])) { 
     #using trycatch to bipass the error when url doesn't exist 
     tryCatch({ 
     if (!file.exists(str_c(folder,"/",filenames[i]))) { 
        download.file(links[i,1], filenames[i], mode = "wb") 
      print(paste0("Downloading: ", filenames[i])) 
        } }, error = function(e){ 

          for (j in seq_along(links[i,])){ 
           tryCatch({ 

           download.file(links[i,j], filenames[i], mode = "wb") 
          }, error = function(e){} 

         ) 
          } 
        } 

    ) 


} 

:

여기 내 시도이다.

+0

'2015_04_09'을 (를) 귀하의 범위에 포함 시켰습니다. 그 날 및 특정 요일에 업로드가 없었을 가능성이 있습니까? –

+0

브라우저에 URL을 붙여 넣었으므로 PDF가 있습니다. – Jomisilfe

+0

공개 인터넷에있는 인증되지 않은 웹 사이트에 개인 정보가 없으면 민감한 PDF가되기를 바랍니다. 당신이'httr :: GET (url, httr :: write_disk (filename), httr()을 사용했다면, 질문이 간다면 너무 빠르게 사이트를 치고있을 수 있습니다. :: verbose()'당신은 생성 된 실제 오류를 볼 수 있습니다. – hrbrmstr

답변

0

for (j in seq_along(links[i,])){은 내부 루프가 이미 실패한 링크를 다시 시도하도록합니다. 링크가 실패하면 내부 루프에서 다시 실패합니다. 프로그램은 계속 행복하게 진행되며 다른 링크를 시도한 적이 없습니다.

inner for 루프에서 j = 1을 건너 뛰어야합니다.

다음은 현재 진행 상황을 보여주는 약간 수정 된 버전의 프로그램입니다.

links1 <- c('a','b','c') 
links2 <- c('x','y','z') 

links <- data.frame(links1,links2) 

for (i in seq_along(links[,1])) { 
    #using trycatch to bipass the error when url doesn't exist 
    tryCatch({ 
     print(sprintf("trying: %s", links[i,1])) 
     if(i == 2) { 
      stop(simpleError("error")) 
     } 
    }, 
    error = function(e){ 
     for (j in seq_along(links[i,])){ 
     tryCatch({ 
      print(sprintf("falling back to %s", links[i,j])) 
     }, 
     error = function(e){ 

     }) 
     } 
    }) 
    } 
관련 문제