rvest
パッケージを使用して、ページhttp://www.radiolab.org/series/podcastsから情報を取得しています。最初のページをスクレイピングした後、下部にある「次へ」リンクをたどり、その2ページ目をスクレイピングし、3ページ目に移動するなど.
次の行でエラーが発生します。
html_session("http://www.radiolab.org/series/podcasts") %>% follow_link("Next")
## Navigating to
##
## ./2/
## Error in parseURI(u) : cannot parse URI
##
## ./2/
rvest
HTML を調べると、明らかに気に入らない「./2/」の周りに余分な問題があることがわかります。
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/ "
質問 1:rvest::follow_link
このリンクをブラウザと同じように正しく処理する
にはどうすればよいですか? (「次へ」リンクを手動で取得し、正規表現でクリーンアップすることもできますが、提供されている自動化を利用することをお勧めしrvest
ます。)
follow_link
コードの最後で、を呼び出しますjump_to
。だから私は次のことを試しました:
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
コードを掘り下げると、元のパス (「/podcasts」) の最後の部分を取り除くためXML::getRelativeURL
に使用する に問題があるようです。dirname
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"
質問 2:rvest::jump_to
相対パスを取得しXML::getRelativeURL
て正しく処理する
にはどうすればよいですか?