R Rvest for() 和错误服务器错误:(503) 服务不可用

问题描述 投票:0回答:1

我是网络抓取新手,但我很高兴在 R 中使用

rvest
。 我尝试用它来抓取公司的特定数据。 我创建了一个 for 循环(171 个网址),当我运行时,它停止在第 6 个或第 7 个网址上并出现错误

Error in parse.response(r, parser, encoding = encoding) : 
  server error: (503) Service Unavailable

当我从第 7 个网址开始循环时,它会再循环两到三个,然后再次停止并出现相同的错误。 我的循环

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()
可以工作,但不太好而且太慢((

r loops web-scraping error-handling rvest
1个回答
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)
}
© www.soinside.com 2019 - 2024. All rights reserved.