我使用R的XML和RCurl包来从网站获取数据。 该脚本需要废弃6,000,000页,因此我创建了一个循环。
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分钟。 我想用一个命令将每1000页报废的过程延迟15分钟
if(page==1000) Sys.sleep(901)
,但没有任何改变。
任何想法出了什么问题以及如何克服这个问题?
答案 0 :(得分:2)
您可以使用命令curl
在R中调用System()
的本机安装。这样,您就可以访问curl
目前不支持的所有RCurl
选项,例如--retry <num>
。选项--retry <num>
将导致已发出的curl
查询在每次失败后重复尝试更长的时间,即在第一次失败后重试1秒,在第二次失败后重试2秒,在第三次失败后重试4秒, 等等。 cURL网站http://curl.haxx.se/docs/manpage.html也提供其他时间控制选项。
答案 1 :(得分:1)
我解决了。只需在每次迭代中添加Sys.sleep(1)
。