getURL(来自RCurl包)无法循环工作

use*_*202 5 r rcurl

我有一个名为URLlist的URL列表,并在其上循环以获取每个URL的源代码:

for (k in 1:length(URLlist)){
    temp = getURL(URLlist[k])
}
Run Code Online (Sandbox Code Playgroud)

问题是一些随机URL,代码卡住了,我得到了错误消息:

Error in function (type, msg, asError = TRUE)  : 
    transfer closed with outstanding read data remaining
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用出现问题的URL的getURL函数而不是在循环中时,它可以正常工作。

有什么帮助吗?非常感谢你

jan*_*ack 3

如果没有更多信息,很难确定,但这可能只是请求发送得太快,在这种情况下,只需在请求之间暂停可能会有所帮助:

for (k in 1:length (URLlist)) {
    temp = getURL (URLlist[k])
    Sys.sleep (0.2) 
}
Run Code Online (Sandbox Code Playgroud)

我假设您的实际代码在循环的每次迭代中写入“temp”之前都会对“temp”执行某些操作,并且无论它执行什么操作都非常快。

您还可以尝试构建一些错误处理功能,这样一个问题就不会毁掉整个事情。下面是一个粗略的示例,在放弃之前对每个 URL 尝试两次:

for (url in URLlist) {
    temp = try (getURL (url))
    if (class (temp) == "try-error") {
        temp = try (getURL (url))
        if (class (temp) == "try-error")
            temp = paste ("error accessing", url)
        }    
    Sys.sleep(0.2) 
}
Run Code Online (Sandbox Code Playgroud)