如何在R中创建网址列表时跳过不存在的网址

时间:2019-03-18 13:18:05

标签: r

在生成网址列表时我需要帮助。我尝试在R Studio中使用以下几行生成列表:

library(RCurl)
links_list = list()
for(j in 10:46) {
    for(k in 10:99) {
       urls <- c(paste0("https://www.tbmm.gov.tr/tutanaklar/TUTANAK/TBMM/d26/c0", j, "/tbmm260", j, "0", k, ".pdf")) #check 0
    if(url.exists(urls) == TRUE)
    links_list <- c(links_list, urls)
  }
}

我的目标是跳过不存在的网址。在使用if之前,它工作得很好,但是结果列出了超过3k的URL,其中大多数都不存在。

我正在使用Windows的PC上工作,但是此代码不会生成网址列表。运行完成后,该列表将保持空白。我在Mac中尝试过相同的方法。它以某种方式起作用,但是代码的运行并未停止。

如果有人提出一个主意,我将不胜感激!

谢谢...

1 个答案:

答案 0 :(得分:0)

如果跟踪所有URL的状态将是最简单的,这样您就可以更好地了解正在发生的情况。试试:

j <- 10:46
k <- 10:99
df <- expand.grid(j=j,k=k)
library(dplyr)
h <- getCurlHandle()
df<-df %>%
  mutate(url = paste0("https://www.tbmm.gov.tr/tutanaklar/TUTANAK/TBMM/d26/c0", j, "/tbmm260", j, "0", k, ".pdf"))%>%
  mutate(exists=sapply(url,url.exists,curl=h))  

在上面的代码中,df的每一行都有一个URL,并跟踪url.exists()的返回值。然后,您可以简单地过滤使用

df %>%
  filter(exists)%>%
  pull(url)

请注意,我在生成的几个URL上进行了尝试,但都不存在,所以可能是问题所在。