我正在使用rvest
从页面中抓取信息的包http://www.radiolab.org/series/podcasts http://www.radiolab.org/series/podcasts。抓取第一页后,我想点击底部的“下一步”链接,抓取第二页,移至第三页,依此类推。
下面的行给出了一个错误:
html_session("http://www.radiolab.org/series/podcasts") %>% follow_link("Next")
## Navigating to
##
## ./2/
## Error in parseURI(u) : cannot parse URI
##
## ./2/
检查 HTML 显示“./2/”周围存在一些额外的问题rvest
显然不喜欢:
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/ "
问题一:我怎样才能得到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
深入研究代码,问题似乎出在XML::getRelativeURL
,它使用dirname
去掉原始路径的最后一部分(“/podcasts”):
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
and XML::getRelativeURL
正确处理相对路径?