我使用R的XML和RCurl包从网站获取数据。脚本需要废弃600万页,所以我创建了一个循环。
for (page in c(1:6000000)){
my_url = paste('http://webpage.....')
page1 <- getURL(my_url, encoding="UTF-8")
mydata <- htmlParse(page1, asText=TRUE, encoding="UTF-8")
title <- xpathSApply(mydata, '//head/title', xmlValue, simplify = TRUE, encoding="UTF-8")
.....
.....
.....}
但是,经过几个循环之后,我得到了错误消息:
curlPerform中的错误(curl= curl,.opts = opts,.encoding = .encoding):连接超时
问题是我不明白“超时”是如何工作的。有时过程在700页之后结束,而其他时候则在1000、1200页之后结束。这一步不稳定。当连接超时时,我在15分钟内无法从我的笔记本电脑访问这个网页。我想使用命令将进程延迟15分钟,每1000页报废一页。
if(page==1000) Sys.sleep(901)
但什么都没变。
有什么想法,哪里出了问题,如何克服这一问题?
发布于 2011-11-05 10:43:00
我解决了。只是在每次迭代中添加了Sys.sleep(1)
。
发布于 2012-11-26 22:53:52
您可以使用命令curl
在R中调用本机安装的System()
。这样,您就可以访问RCurl
目前不支持的所有RCurl
选项,比如--retry <num>
。选项--retry <num>
将导致发出的curl
查询在每次失败后的更长时间内重复重试,即在第一次失败后重试1秒,在第二次失败之后重试2秒,在第三次失败之后重试4秒,等等。其他时间控制选项也可在cURL站点http://curl.haxx.se/docs/manpage.html上使用。
https://stackoverflow.com/questions/7620027
复制相似问题