getURL(来自RCurl包)在循环中不起作用

时间:2013-05-02 12:58:52

标签: r rcurl

我有一个名为URLlist的URL列表,我循环遍历它以获取每个URL的源代码:

for (k in 1:length(URLlist)){
    temp = getURL(URLlist[k])
}

问题在于某些随机网址,代码卡住了,我收到了错误消息:

Error in function (type, msg, asError = TRUE)  : 
    transfer closed with outstanding read data remaining

但是当我尝试使用getURL函数时,不是在循环中,使用有问题的URL,它完全有效。

请帮忙吗?非常感谢你

1 个答案:

答案 0 :(得分:3)

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

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

我假设你的实际代码在循环的每次迭代中写入之前都使用'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) 
}