用R語言高效下載圖片

有時候無法避免需要上網下載一些圖片,一開始都是複製-粘貼,或者是右鍵另存為,不僅效率低,而且單純手工操作,容易遺漏。於是,就想到曾經用R語言爬取網站表格數據,思考是不是可以用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繪製雙層餅圖及環形圖?

TAG:数据可视化 | 数据分析 |