用R語言高效下載圖片
通過在知乎的搜索,發現了一個可視化的大師——杜雨,上面分享了很多可視化的文章,果斷關注。同時參考杜雨的文章進行自己的實踐操作。
選擇的網站是免費圖庫第三波!!22個無版許可權制的高清無碼圖庫站,這是PPT大神阿文推薦的下載高清圖片的網址,想著既然要操作,就選擇自己需要的圖片吧~
具體代碼:
install.packages("downloader")library(rvest)library(downloader)library(dplyr)
由於downloader不屬於R中的基礎包,所以在運用之前需要下載安裝包,其餘幾個在之前練習中已經安裝好了。
接著隨機選取一張圖片,右鍵選擇「檢查」,在網頁右側會出現一個網頁結構信息,同時定位到這張圖片所在的位置,如圖所示:
其中,「img」是指圖片,「str」是指圖片的地址。而我們是需要下載全部的圖片,所以還需要查看整體的網頁結果,也就是說找出img所在的分區結構,我的查找方法就是不斷的往上找,例如順著前面的三角符號往上查找它的上一級,就是img所在的分區結構「div」,如圖所示:
於是,寫入代碼:
url <- "http://www.uisdc.com/22-stunning-free-photos-websites"picture<- read_html(url)%>% html_nodes("div.entry-content")%>%html_nodes("img")%>%html_attr("src")
代碼中「%>%」表示將左邊賦值為右邊,「url」是圖片所在的網址,「div.entry-content」圖片所在的分區結構位置,「img」意味著選擇了圖片信息,「src」是圖片所在的地址。
查看前面十個圖片地址信息:
> head(picture,10) [1] "http://image.uisdc.com/wp-content/uploads/2015/04/22-stunning-free-photos-websites-1.jpg" [2] "http://image.uisdc.com/wp-content/uploads/2015/04/fancycrave.jpg" [3] "http://image.uisdc.com/wp-content/uploads/2015/04/madeinmoments.png" [4] "http://image.uisdc.com/wp-content/uploads/2015/04/realistic-shots-photo.jpg" [5] "http://image.uisdc.com/wp-content/uploads/2015/04/snapographic.jpg" [6] "http://image.uisdc.com/wp-content/uploads/2015/04/designerspics.jpg" [7] "http://image.uisdc.com/wp-content/uploads/2015/04/goodstockphotos.jpg" [8] "http://image.uisdc.com/wp-content/uploads/2015/04/stokpic.jpg" [9] "http://image.uisdc.com/wp-content/uploads/2015/04/freenaturestock.jpg" [10] "http://image.uisdc.com/wp-content/uploads/2015/04/freemagebank.jpg" >
最後,利用for循環語句和downloader包下載圖片:
for(i in 1:length(picture)) { download(picture[i],paste("F:/數據可視化/Image/picture",i,".jpg",sep = ""), mode = "wb")}
最後的成果:
url <- "http://www.uisdc.com/22-stunning-free-photos-websites"picture<- read_html(url)%>% html_nodes("div.entry-content")%>%html_nodes("img")%>%html_attr("src")
這個時候我們可以用「stringr」這個包進行篩選所需的網址,例如:
right = "https"picture<-grep(right, picture,value=TRUE)
具體可以參見參考文章。
參考文章:杜雨《用R語言抓取網頁圖片--從此高效存圖告別手工時代 - 知乎專欄》
推薦閱讀:
※R語言可視化——圖表嵌套(母子圖)
※Python 數據可視化?
※R語言之數據可視化
※有趣!如何用Python-matplotlib繪製雙層餅圖及環形圖?