使用R从网页中抓取可下载文件的链接地址?

时间:2015-07-20 12:55:14

标签: r web-scraping rvest

我试图自动执行一个过程,该过程涉及从几个网页下载.zip文件并提取它们包含的.csv文件。挑战在于.zip文件名以及链接地址每周或每年更改一次,具体取决于页面。有没有办法从这些页面中删除当前链接地址,以便我可以将这些地址提供给下载文件的函数?

其中一个目标网页是this one。我要下载的文件是标题" 2015 Realtime Complete All Africa File" ---即zipped .csv下的第二个项目符号。在我写的时候,该文件标有" Realtime 2015 All Africa File(2015年7月11日更新)(csv)"在网页上,我想要的链接地址是http://www.acleddata.com/wp-content/uploads/2015/07/ACLED-All-Africa-File_20150101-to-20150711_csv.zip,但今天晚些时候应该更改,因为数据会在每个星期一更新 - 因此我的挑战。

我尝试但未能自动提取.zip文件名与' rvest'以及Chrome中的selectorgadet扩展程序。这是怎么回事:

> library(rvest)
> realtime.page <- "http://www.acleddata.com/data/realtime-data-2015/"
> realtime.html <- html(realtime.page)
> realtime.link <- html_node(realtime.html, xpath = "//ul[(((count(preceding-sibling::*) + 1) = 7) and parent::*)]//li+//li//a")
> realtime.link
[1] NA

html_node()调用中的xpath来自突出显示实时2015全非文件(2015年7月11日更新)(csv)字段的(csv)部分,然后单击其他突出显示的位页面消除所有黄色,只留下红色和绿色。

我在这个过程中犯了一个小错误,还是我完全走错了?正如您所知,我对HTML和网络抓取没有任何经验,所以我非常感谢您的帮助。

1 个答案:

答案 0 :(得分:11)

我认为您在单个xpath表达式中尝试做太多 - 我会通过一系列较小的步骤来解决问题:

library(rvest)
library(stringr)
page <- html("http://www.acleddata.com/data/realtime-data-2015/")

page %>%
  html_nodes("a") %>%       # find all links
  html_attr("href") %>%     # get the url
  str_subset("\\.xlsx") %>% # find those that end in xlsx
  .[[1]]                    # look at the first one
相关问题