首页 > 解决方案 > 如何在 R 中创建 url 列表时跳过不存在的 url

问题描述

我需要帮助生成一个 url 列表。我尝试在 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 上工作,但此代码不会生成 url 列表。运行完成后,该列表仍为空。我在mac上尝试了同样的方法。它以某种方式工作,但代码的运行并没有停止。

如果有人提出想法,我将不胜感激!

谢谢...

标签: r

解决方案


如果您跟踪所有 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 上进行了尝试,但它们都不存在,所以这可能是问题所在。


推荐阅读