我有一个名为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,它完全有效。
请帮忙吗?非常感谢你
答案 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)
}