2016-07-28 7 views
1

Ich versuche, eine for-Schleife schreiben, die durch viele Websites durchlaufen wird und extrahieren ein paar Elemente, und speichern Sie die Ergebnisse in einer Tabelle in R. Hier ist mein bisher so weit, nur nicht sicher Wie starte ich die for-Schleife oder kopiere alle Ergebnisse in eine Variable, um sie später zu exportieren.Loop-URL und speichern Sie Informationen in R

library("dplyr") 
library("rvest") 
library("leaflet") 
library("ggmap") 


url <- c(html("http://www.webiste_name.com/") 

agent <- html_nodes(url,"h1 span") 
fnames<-html_nodes(url, "#offNumber_mainLocContent span") 
address <- html_nodes(url,"#locStreetContent_mainLocContent") 

scrape<-t(c(html_text(agent),html_text(fnames),html_text(address))) 


View(scrape) 

Antwort

0

Ich würde mit lapply gehen.

Der Code würde wie folgt aussehen:

library("rvest") 
library("dplyr") 

#a vector of urls you want to scrape 
URLs <- c("http://...1", "http://...2", ....) 

df <- lapply(URLs, function(u){ 

     html.obj <- read_html(u) 
     agent <- html_nodes(html.obj,"h1 span") %>% html_text 
     fnames<-html_nodes(html.obj, "#offNumber_mainLocContent span") %>% html_text 
     address <- html_nodes(html.obj,"#locStreetContent_mainLocContent") %>% html_text 

    data.frame(Agent=agent, Fnames=fnames, Address=address) 
}) 

df <- do.all(rbind, df) 

View(df) 
+0

Arbeitete groß! Wie kann ich einstellen, dass die Daten von jedem Kratzen in einer separaten Reihe gespeichert werden? Gerade jetzt speichert sie alle nebeneinander – CHopp

+0

Ich bin mir nicht sicher, ob ich Ihre Frage verstehe. Innerhalb des dat.frame von 'lapply' könnte man folgendes' data.frame (Agent = Agent, Fnames = fnames, Adresse = Adresse, URL = u) 'haben, um die entsprechende URL zu jeder generierten Zeile zu haben –

+0

Ich habe es herausgefunden , aber eine andere Frage, warum würde ich einen Fehler wie diese erhalten, wenn Sie versuchen, eine Website zu suchen "Fehler: 'www.website.com' existiert nicht im aktuellen Arbeitsverzeichnis" – CHopp

2

Da Ihre Frage nicht vollständig reproduzierbar ist, hier ist ein Spielzeug Beispiel, das durch drei URLs (rote Socken, Jays und Yankees) Schleifen:

library(rvest) 

# teams 
teams <- c("BOS", "TOR", "NYY") 

# init 
df <- NULL 

# loop 
for(i in teams){ 
    # find url 
    url <- paste0("http://www.baseball-reference.com/teams/", i, "/") 
    page <- read_html(url) 
    # grab table 
    table <- page %>% 
     html_nodes(css = "#franchise_years") %>% 
     html_table() %>% 
     as.data.frame() 
    # bind to dataframe 
    df <- rbind(df, table) 
} 

# view captured data 
View(df) 

Die Schleife, weil es i ersetzt in funktioniert paste0 mit jedem Team in Folge.