RCurl, ошибка: время ожидания соединения - PullRequest
1 голос
/ 01 октября 2011

Я использую пакеты XML и RCurl R для получения данных с веб-сайта. Сценарий должен удалить 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 минут. Я думал об использовании команды для задержки процесса на 15 минут каждые 1000 страниц списанных

if(page==1000) Sys.sleep(901)

, но ничего не изменилось.

Есть идеи, что не так и как это преодолеть?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2012

Вы можете сделать вызов в R для собственной установки curl, используя команду System(). Таким образом, вы получаете доступ ко всем опциям curl, которые в настоящее время не поддерживаются RCurl, таким как --retry <num>. Опция --retry <num> приведет к тому, что сгенерированный запрос curl будет повторять повторные попытки через все более длительные промежутки времени после каждого сбоя, т.е. повторять попытку через 1 секунду после первого сбоя, через 2 секунды после второго сбоя, через 4 секунды после третьего сбоя и т. Д. , Другие варианты контроля времени также доступны на сайте cURL http://curl.haxx.se/docs/manpage.html.

1 голос
/ 05 ноября 2011

Я решил это. Просто добавил Sys.sleep(1) к каждой итерации.

...