Я новичок в webscraping, но я взволнован использованием rvest
в R. Я попытался использовать его для очистки конкретных данных компаний. Я создал цикл (171 URLs), и когда я бегу он останавливается на 6-м или 7-м URL с ошибкойR Rvest для() и ошибки сервера ошибок: (503) Сервис недоступен
Error in parse.response(r, parser, encoding = encoding) :
server error: (503) Service Unavailable
Когда я начинаю цикл из 7 URL он идет на два-три больше, и снова останавливается с той же ошибкой. Мой цикл
library(rvest)
thing<-c("http://www.informazione-aziende.it/Azienda_ LA-VIS-S-C-A",
"http://www.informazione-aziende.it/Azienda_ L-ANGOLO-DEL-DOLCE-DI-OBEROSLER-MARCO",
"http://www.informazione-aziende.it/Azienda_ MARCHI-LAURA",
"http://www.informazione-aziende.it/Azienda_ LAVIS-PIZZA-DI-GASPARETTO-MATTEO",
"http://www.informazione-aziende.it/Azienda_ LE-DELIZIE-MOCHENE-DI-OSLER-NICOLA",
"http://www.informazione-aziende.it/Azienda_ LE-DELIZIE-S-N-C-DI-GAMBONI-PIETRO-E-PISONI-MAURO-C-IN-SIGLA-LE-DELIZIE-S-N-C",
"http://www.informazione-aziende.it/Azienda_ LE-FONTI-DISTILLATI-DI-COVI-MARCELLO",
"http://www.informazione-aziende.it/Azienda_ LE-MIGOLE-DI-MATTEOTTI-LUCA",
"http://www.informazione-aziende.it/Azienda_ LECHTHALER-DI-TOGN-LUIGI-E-C-S-N-C",
"http://www.informazione-aziende.it/Azienda_ LETRARI-AZ-AGRICOLA")
thing<-gsub(" ", "", thing)
d <- matrix(nrow=10, ncol=4)
colnames(d)<-c("RAGIONE SOCIALE",'ATTIVITA', 'INDIRIZZO', 'CAP')
for(i in 1:10) {
a<-thing[i]
urls<-html(a)
d[i,2] <- try({ urls %>% html_node(".span") %>% html_text() }, silent=TRUE)
}
Может быть, есть способ избежать этой ошибки, спасибо заранее, любая помощь будет оценена.
UPD С помощью следующего кода я пытаюсь перезапустить цикл получения данных, начиная с последнего успешного с repeat()
, но он бесконечно цикличен, надеюсь на некоторые предложения.
for(i in 1:10) {
a<-thing[i]
try({d[i,2]<- try({html(a) }, silent=TRUE) %>%
html_node(".span") %>%
html_text() }, silent=TRUE)
repeat {try({d[i,2]<- try({html(a) }, silent=TRUE) %>%
html_node(".span") %>%
html_text() }, silent=TRUE)}
if (!is.na(d[i,2])) break
}
Или с while()
for(i in 1:10) {
a<-thing[i]
while (is.na(d[i,2])) {
try({d[i,2]<-try({html(a) %>%html_node(".span")},silent=TRUE) %>% html_text() },silent=TRUE)
}
}
While()
работает, но не так хорошо, и слишком медленно ((
Скорее всего, эти сети страницы [недоступны] (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_Error) - Я не думаю, что это имеет какое-либо отношение к 'rvest'. Вы можете использовать 'try (..., silent = TRUE)', чтобы пропустить сломанные URL-адреса. – nrussell
@nrussell, может быть, какой-то тип функции 'if else',' if' error' else (then) 'перезапустить цикл из последнего + 1 результирующего URL-адреса. Но я не могу представить его код). Будет ли это эффективно? –
'd [i, 2] <- try ({ URL-адреса%>% html_node (". Span ")%>% html_text() }, silent = TRUE)', вероятно, будет работать нормально. – nrussell