Maciej B.

Maciej B. Doktorant

Temat: Ściąganie png/jpg

Witam,

chciałbym za pomocą R ściągnąć wszystkie zdjęcia, które znajdują się na tym blogu. Niestety jak używam funkcji download.file obrazki ściągają się ale są uszkodzone. Co mogę zrobić aby ściągnąć je poprawnie?

Kod, który użyłem:


library(XML)
dir.create('c:/photos')
urls<-paste("http://thedevilsguard.tumblr.com/page/",1:1871,sep="")

#wybieram, dla przykładu, tylko jedną stronę
doc<-htmlParse(urls[1])
links<-unique(unlist(xpathApply(doc,'//div[@class="timestamp"]/a',xmlGetAttr,'href')))
for (i in 1:length(links)){
doc2<-htmlParse(links[i])
link<-xpathApply(doc2,'//div[@class="centre photopage"]//p//img',xmlGetAttr,'src')[[1]][1]
download.file(link,paste("C:/photos/",basename(link),""))
}


oraz przykładowy kod dla jednego zdjęcia


dir.create('c:/photos')
link<-"http://30.media.tumblr.com/tumblr_m0q299CMfP1qk6uvyo1_500.jpg"
download.file(link,paste("C:/photos/",basename(link),""))


Z góry dzięki za pomoc!

edit:
błędy, które wyświetla mi irfanview wyglądają następująco:
dla jpg - "Decode error! JPEG datastream contains no image",
dla png - "Decode error! invalid or unsupported png file"
ale większość wygląda tak: zły obrazekMaciej B. edytował(a) ten post dnia 11.03.12 o godzinie 15:52
Maciej B.

Maciej B. Doktorant

Temat: Ściąganie png/jpg

Problem rozwiązany, w download.file należało dodać argument mode="wb". :)
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: Ściąganie png/jpg

:)
miałem ten sam problem, ale nie udało mi się znaleźć odpowiedniego rozwiązania :D
brawo !

ps. chciałem zrobić z R'a spersonalizowane narzędzie do ściągania danych z sieci - pogoda, powiadomienia o nowych news'ach z odpowiednich portali itd.
wiem, ze jest to jak piłowanie drewna szalikiem i R nie powinien chodzić w pętli, ale miałem na to nie lada ochotę
ps2. kiedyś planowałem napisać Minesweeper'a pod R :D
ale po napisaniu wizualizacji planszy oraz funkcji do generowania losowych plansz odpuściłem sobie ;)

Następna dyskusja:

Brak pliku po exporcie do j...




Wyślij zaproszenie do