2015-07-20 49 views
5

我試圖自動化一個過程,涉及從幾個網頁下載.zip文件並提取它們包含的.csvs文件。挑戰在於.zip文件名稱以及鏈接地址每週或每年更改一次,具體取決於頁面。有沒有辦法從這些頁面中抓取當前鏈接地址,然後我可以將這些地址提供給一個下載文件的函數?使用R從網頁上刮取可下載文件的鏈接地址?

其中一個目標網頁是this one。我想下載的文件是「2015 Realtime Complete All Africa File」標題下的第二個項目符號 - 即壓縮的.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,但今天晚些時候應該會更改,因爲數據是每個星期一更新---因此我的挑戰。

我試過了,但未能在Chrome中以'rvest'和selectorgadet擴展名自動提取該.zip文件名。下面是該如何去:

> 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從強調只是(CSV)的實時2015年全非文件(更新2015年7月11日)的綠色部分(CSV)字段,然後點擊進來在頁面的其他突出顯示的位上消除所有的黃色,只留下紅色和綠色。

我在這個過程中犯了一個小錯誤,還是我完全在錯誤的軌道上?如你所知,我對HTML和網頁抓取沒有經驗,所以我非常感謝一些幫助。

+2

試着去'realtime.html%>%html_node(的XPath =「/ html/body/div/div/div/div [1]/div/article/div/ul [1]/li [2]/a」)%>%html_attr(「href」)'。我使用Firebug來提取xpath。 – lukeA

+0

是的,這很有用,非常感謝。我現在去嘗試弄清楚如何使用螢火蟲。 – ulfelder

+0

@lukeA我可以使用在Chrome中檢查元素,以查看帶有所需數據集的其他頁面的html,並根據調試的示例找出如何編寫適用於它的xpath。所以:再次感謝! – ulfelder

回答

10

我認爲你正在試圖做太多的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 
+0

非常高效,謝謝。對於我的任務,我需要第一個.zip文件的url,但通過用「\\。zip」替換「\\。xlsx」很容易。瞧。 – ulfelder