używam pakietu rvest
do zeskanowania informacji ze strony http://www.radiolab.org/series/podcasts. Po skrobanie pierwszą stronę, chcę podążać za „Dalej” link na dole, zeskrobać tę drugą stronę, przenieść na trzeciej stronie, itpPo "następnym" łączu ze ścieżkami względnymi przy użyciu rvest
Poniższy wiersz daje błąd:
html_session("http://www.radiolab.org/series/podcasts") %>% follow_link("Next")
## Navigating to
##
## ./2/
## Error in parseURI(u) : cannot parse URI
##
## ./2/
Kontrola HTML wskazuje, że jest jakiś dodatkowy cruft wokół „./2/” że rvest
najwyraźniej nie lubi:
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/ "
Pytanie 1: Jak mogę uzyskać rvest::follow_link
traktować ten link poprawnie, tak jak robi to moja przeglądarka? (Mogłem ręcznie chwycić „Dalej” link i oczyścić go z regex, ale wolą skorzystać z automatyzacji wyposażonego rvest
.)
Na końcu kodu follow_link
, wywołuje jump_to
. Tak próbowałem następujące:
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
Kopanie do kodu, wygląda na to, że problem jest z XML::getRelativeURL
, który wykorzystuje dirname
zdejmować ostatnią część oryginalnej ścieżki („/ podcastów”):
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"
Pytanie 2: Jak mogę uzyskać rvest::jump_to
i XML::getRelativeURL
poprawnie obsłużyć ścieżek względnych?
Zainstaluj wersję dev, w której naprawiono ten błąd – hadley
Cóż, drugi błąd jest; rvest nie naprawi w magiczny sposób złych adresów URL. – hadley