如何停止url.exists()?

时间:2019-07-18 12:14:04

标签: r url web-scraping download rcurl

我有一个PDF URL列表,我想下载这些PDF。但是,并非所有URL仍然存在,这就是为什么我之前使用RCurl函数url.exists()检查它们的原因。但是,对于某些URL,此功能将永远运行而不会产生结果。我什至无法使用withTimeout()函数停止它。

我将url.exists()包装到withTimeout()中,但是超时不起作用:

library(RCurl)
library(R.utils)
url <- "http://www.shangri-la.com/uploadedFiles/corporate/about_us/csr_2011/Shangri-La%20Asia%202010%20Sustainability%20Report.pdf"
withTimeout(url.exists(url), timeout = 15, onTimeout = "warning")

该函数永远运行,超时将被忽略。

我的问题:

  • 是否有任何可能的检查在将该URL转到url.exists()之前对其进行整理?
  • 还是有可能阻止url.exists()永远运行?

我尝试过的其他检查(但没有整理出该URL)是

try(length(getBinaryURL(url))>0) == T
http_status(GET(url))
!class(try(GET(url]))) == "try-error"

1 个答案:

答案 0 :(得分:0)

library(httr)

urls <- c(
  'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-1&unit=SLE010', 
  'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=HMM202',
  'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=SLE339'
)

sapply(urls, url_success, config(followlocation = 0L), USE.NAMES = FALSE)

此功能类似于file.exists,并确定对特定URL的请求是否响应没有错误。我们发出请求,但要求服务器不要返回正文。我们只处理标题。