2017-11-05 2 views
-1

Ich habe Datentabelle (npi1_list), die ID-Nummer enthält und basierend auf der Nummer der Web-Verschrottung von der Website, npi Liste wird die ID-Nummer auf der Website und ziehen Sie die Datensätze für mich.Versuchen Sie und fangen Sie in r während der Verschrottung

library("rvest") 
library("data.table")  
final<- NULL 
    for(i in 8000:200000){ 
    url<-paste("http://www.npinumberlookup.org/getResultDetails.php? 
    npinum=",npi1_list[i,1],sep='') 
    webpage<-read_html(url) 
    Name<- html_nodes(webpage, 'table:nth-child(8) tr:nth-child(1) td~ td+ td , 
    table:nth-child(6) tr:nth-child(1) td~ td+ td') 
    rank_data <-html_text(Name) 
    final <- rbind(final,rank_data) 
    print(i) 
    Sys.sleep(1) 
    } 

Dies funktioniert gut, aber manchmal wird der Fehler der Verbindungszeit Port 80 Fehler angezeigt und wieder dann muss ich i aus initialisieren, wo die Schleife beendet wurde und die für loop.How erneut ausführen versuchen zu tun, zu implementieren und fangen Option in oben für Schleife, so dass ich keine 200000.

+0

bis Linie automatisieren Warum sind Sie nicht nur auf die [herunterladbare vollständige Datenbank] mit (http://download.cms.gov/nppes/NPI_Files. html) und/oder die wöchentlichen Updates? Hämmern einer Website - sie ** explizit angeben ** ein Minimum von [20 Crawl-Verzögerung] (http://www.npinumberlookup.org/robots.txt) - ist nicht cool für Daten, die Sie in Massen an anderer Stelle finden können. Sie sind auch keine autoritative Quelle, daher mache ich mir auch Gedanken über Datenintegritätsprobleme. – hrbrmstr

Antwort

0
library("rvest") 
library("data.table")  
final<- NULL 
for(i in 8000:200000){   
    repeat{ 
     successful = T 
     tryCatch({ 
      url<-paste("http://www.npinumberlookup.org/getResultDetails.php? 
      npinum=",npi1_list[i,1],sep='') 
      webpage<-read_html(url) 
      Name<- html_nodes(webpage, 'table:nth-child(8) tr:nth-child(1) td~ td+ td , 
      table:nth-child(6) tr:nth-child(1) td~ td+ td') 
      rank_data <-html_text(Name) 
      final <- rbind(final,rank_data) 
      print(i) 
     }, error = function(e){ 
      print(e) 
      print(paste0('connection error on ', i)) 
      successful <<- F 
     }) 
     Sys.sleep(1) 
     if(successful) 
      break 
    } 
}