-Paket verwenden, um Informationen von der Seite http://www.radiolab.org/series/podcasts zu kratzen. Nachdem die erste Seite Schaben, möchte ich die „Weiter“ Link am Ende folgen, dass die zweite Seite kratzen, auf die dritte Seite verschieben, usw.Nach "nächsten" Link mit relativen Pfaden mit Hilfe von
Die folgende Zeile einen Fehler gibt:
html_session("http://www.radiolab.org/series/podcasts") %>% follow_link("Next")
## Navigating to
##
## ./2/
## Error in parseURI(u) : cannot parse URI
##
## ./2/
Inspizieren des HTML zeigt, dass es einige zusätzliche cruft um die „./2/“ dass rvest
mag anscheinend nicht:
html("http://www.radiolab.org/series/podcasts") %>% html_node(".pagefooter-next a")
## <a href=" ./2/ ">Next</a>
.Last.value %>% html_attrs()
## href
## "\n \n ./2/ "
Frage 1: Wie kann ichbekommen 0, um diesen Link richtig zu behandeln, wie mein Browser? (Ich kann manuell den „Weiter“ Link packen und reinigen Sie es mit Regex, aber lieber die Vorteile der Automatisierung mit rvest
versehen nehmen.)
Am Ende des follow_link
Code, ruft jump_to
. Also versuchte ich folgendes:
html_session("http://www.radiolab.org/series/podcasts") %>% jump_to("./2/")
## <session> http://www.radiolab.org/series/2/
## Status: 404
## Type: text/html; charset=utf-8
## Size: 10744
## Warning message:
## In request_GET(x, url, ...) : client error: (404) Not Found
Graben in den Code, es sieht aus wie das Problem mit XML::getRelativeURL
ist, die dirname
verwendet den letzten Teil des ursprünglichen Pfad („/ Podcasts“) abzustreifen:
XML::getRelativeURL("./2/", "http://www.radiolab.org/series/podcasts/")
## [1] "http://www.radiolab.org/series/./2"
XML::getRelativeURL("../3/", "http://www.radiolab.org/series/podcasts/2/")
## [1] "http://www.radiolab.org/series/3"
Frage 2: Wie kann ich rvest::jump_to
und XML::getRelativeURL
richtig relative Pfade zu umgehen?
Installieren Sie die dev-Version, wo dieser Fehler behoben ist – hadley
Nun, der zweite Bug ist; Rvest wird keine schlechten URLs auf magische Weise reparieren. – hadley