Ich versuche, einige IMDB-Daten durch eine Liste von URLs Schleifen zu kratzen. Leider ist meine Ausgabe nicht genau das, was ich mir erhofft habe, geschweige denn, sie in einem Datenrahmen zu speichern.Rvest: Scrape mehrere URLs
ich URLs mit
library(rvest)
topmovies <- read_html("http://www.imdb.com/chart/top")
links <- top250 %>%
html_nodes(".titleColumn") %>%
html_nodes("a") %>%
html_attr("href")
links_full <- paste("http://imdb.com",links,sep="")
links_full_test <- links_full[1:10]
und dann konnte ich mit
lapply(links_full_test, . %>% read_html() %>% html_nodes("h1") %>% html_text())
Inhalt bekommen, aber es ist eine verschachtelte Liste, und ich weiß nicht, wie es in einem richtigen Daten zu erhalten. Rahmen in R. Und falls ich ein anderes Attribut erhalten wollte, sagen
%>% read_html() %>% html_nodes("strong span") %>% html_text()
die IMDB Bewertung abzurufen, erhalte ich die die gleiche geschachtelte-list-Ausgabe und vor allem muss ich read_html() zweimal tun ... was viel Zeit in Anspruch nimmt. Gibt es einen besseren Weg, dies zu tun? Ich denke, for-Schleifen, aber ich kann es nicht so arbeiten :(
(Ich gehe davon aus 'top250' ist wirklich' topmovies'.) Was von Ihrem 'lapply mit der Liste falsch ist (. ..) '? Es ist nur eine Liste (von Single-String-Vektoren), indizieren Sie es wie einen Vektor (optional mit '[[' anstelle von '['). Also, was ist ein "richtiger Rahmen *"? Zweitens kann die Verwendung von "strong span" etwas vage sein, Sie könnten besser Xpaths oder andere CSS-Einschränkungen verwenden. – r2evans