2015-07-20 12 views
5

Ben web sayfalarının bir çift dosyaları .zip indirirken ve içerdikleri .csvs ayıklanması ihtiva eden bir yöntemi otomatikleştirmek çalışıyorum. Sorun, .zip dosya adlarının ve dolayısıyla bağlantı adreslerinin sayfaya bağlı olarak haftalık veya yıllık olarak değişmesidir. Mevcut link adreslerini bu sayfalardan kazımak için bir yol var mı? Böylece bu adresleri dosyaları indiren bir işleve aktarabilir miyim? Hedef sayfalarınınBir web sayfasından indirilebilir bir dosyanın bağlantı adresini kazıyarak R'yi kullanarak?

biri this one olduğunu. İndirmek istediğim dosya "2015 Realtime Complete All Africa File" başlığının altındaki ikinci mermi --- i.e., Sıkıştırılmış .csv. Ben yazarken veri çünkü, bu dosya, bugün ilerleyen web sayfasında "(2015 11 Temmuz güncellendi) Gerçek Zamanlı 2015 Tüm Afrika Dosyası (CSV)" etiketli, tek isteğim bağlantı adresini http://www.acleddata.com/wp-content/uploads/2015/07/ACLED-All-Africa-File_20150101-to-20150711_csv.zip, ama bu değişmelidir edilir Her Pazartesi güncellendi --- bu yüzden benim meydan okuma.

Denedim ama 'rvest' ve Chrome'da selectorgadet uzantısıyla o .zip dosya adının çıkarılması otomatikleştirmek için başarısız oldu. İşte o gittiğini anlatayım:

> 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() aramayýn xpath yeşil sadece (2015 11 Temmuz güncellendi) Gerçek Zamanlı 2015 Tüm Afrika Dosyası (CSV) kısmını (CSV) alanını vurgulama ve ardından tıklayarak gelen

Tüm sarıyı ortadan kaldırmak ve sadece kırmızı ve yeşili bırakmak için sayfanın diğer vurgulanmış bitlerinde.

Ben bu süreçte küçük bir hata yaparsanız, ya da ben burada yanlış yolda sadece tamamen duyuyorum mü? Anlayabileceğiniz gibi, HTML ve web kazıma konusunda sıfır deneyimim var, bu yüzden bazı yardımları gerçekten takdir ediyorum.

+2

deneyin 'realtime.html%>% html_node (xpath = "/ html/vücut/div/div/div/div [1]/div/haber/div/ul [1]/li [2]/a")%>% html_attr ("href") '. Xpath'i çıkarmak için Firebug kullandım. – lukeA

+0

Evet, işe yarıyor, çok teşekkür ederim. Şimdi ateş böceğinin nasıl kullanılacağını anlamaya çalışacağım. – ulfelder

+0

@lukeA İstediğim bir veri kümesi ile diğer sayfanın html'sini ve hata ayıklama örneğinizi kullanarak çalıştığı bir xpath'in nasıl yazılacağını öğrenmek için Chrome'da Inspect Element özelliğini kullanabildim. Yani: tekrar teşekkürler! – ulfelder

cevap

10

Ben tek bir xpath ifadesi çok fazla yapmaya çalışıyoruz düşünüyorum - Ben daha küçük adımlar bir dizi sorunu saldırmak istiyorum:

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

Çok verimli, teşekkürler. Benim görevim için, ilk .zip dosyası için URL'ye ihtiyacım vardı, ancak "\\. Xlsx" ifadesini "\\. Zip" ile değiştirerek bunu elde etmek kolaydı. Voila. – ulfelder

İlgili konular