2015-04-28 2 views
0

Я новичок в 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() работает, но не так хорошо, и слишком медленно ((

+0

Скорее всего, эти сети страницы [недоступны] (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_Error) - Я не думаю, что это имеет какое-либо отношение к 'rvest'. Вы можете использовать 'try (..., silent = TRUE)', чтобы пропустить сломанные URL-адреса. – nrussell

+0

@nrussell, может быть, какой-то тип функции 'if else',' if' error' else (then) 'перезапустить цикл из последнего + 1 результирующего URL-адреса. Но я не могу представить его код). Будет ли это эффективно? –

+1

'd [i, 2] <- try ({ URL-адреса%>% html_node (". Span ")%>% html_text() }, silent = TRUE)', вероятно, будет работать нормально. – nrussell

ответ

2

Похоже, если вы попали на этот сайт слишком быстро, вы получите 503. Добавить Sys.sleep(2) и все 10 итераций работали для меня ...

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) { 
    print(i) 
    a<-thing[i] 
    urls<-html(a) 
    d[i,2] <- try({ urls %>% html_node(".span") %>% html_text() }, silent=TRUE) 
    Sys.sleep(2) 
} 
+0

WOW это действительно круто !!, это 'Sys.sleep (2) 'дает отдых на 2 сек ?? –

+0

Да, не уверен, что достаточно 2 секунд или слишком много. Кроме того, вероятно, разумно включить некоторые другие решения для очистки кода ... – cory

 Смежные вопросы

  • Нет связанных вопросов^_^