很多程序員需要各種各樣的圖標(biāo),而easyicon.net圖標(biāo)網(wǎng)是很多人的選擇,怎樣批量下載上面的圖標(biāo)呢?小編今天帶來的Easyicon圖標(biāo)批量下載工具就能幫你批量下載easyicon的圖標(biāo),下面有詳細(xì)的下載教程,還有源碼供各位程序猿參考!
easyicon.net是提供★超過五十萬個★PNG、ICO、ICNS格式圖標(biāo)搜索、圖標(biāo)下載服務(wù)。
Easyicon圖標(biāo)批量下載詳細(xì)教程
一、需求分析
在平時的程序開發(fā)中,為了快速搭建較為美觀的用戶界面,經(jīng)常要下載一些圖標(biāo)作為按鈕、控件等的外觀,甚至需要自己動手制作一些特定的圖標(biāo)或圖片。自己動力,不得不說需要一定的技術(shù)和審美功底;下載,又得到網(wǎng)上到處找,找到一套適合主題、色彩、尺寸、美觀大方的圖標(biāo)還真是一件不容易的事。
幸好,網(wǎng)上有很多專門下載圖標(biāo)的網(wǎng)站,常用的有:
http://www.easyicon.net/
https://www.iconfinder.com/
http://www.haotu.net/
http://www.iconpng.com/
http://findicons.com/
http://www.flaticon.com/
http://www.iconspedia.com/
http://icones.pro/
這些網(wǎng)站各有各的優(yōu)點(diǎn),共同點(diǎn)是都包含大量圖標(biāo),我個人比較喜歡在EasyIcon上去搜索,下載,也很喜歡它的網(wǎng)址。它有優(yōu)點(diǎn)有:
(1)支持中英文搜索。EasyIcon支持中文和英文的搜索,當(dāng)然,它的原始圖標(biāo)名稱還是英文,只不過在搜索前,利用百度翻譯API將中文翻譯成英文,再進(jìn)行搜索。

(2)用戶體驗(yàn)好。很多網(wǎng)址在進(jìn)行瀏覽時,都是需要點(diǎn)擊"下一頁"之類的按鈕,而它支持鍵盤快捷鍵,而且體驗(yàn)效果還不錯;它的界面、文字啊也比較活潑,比如按熱度排序,它優(yōu)雅的稱其為"拋頭露面的優(yōu)先"。

(3)保持更新。作為寫代碼的,我們最害怕開源的東西不再更新了,EasyIcon圖標(biāo)更新頻率還算將就。

(4)打包下載,有時,我們下載的圖標(biāo)不只一個,可以使用它的打包下載功能。(但此功能有一定的限制,如每一次打包下載有數(shù)量限制,且下載尺寸、格式等不便設(shè)置,這也是為什么要重新寫一個批量下載工具的原因。)

所以,總結(jié)下來,我們需要一個程序,實(shí)現(xiàn)批量下載不同格式、尺寸的圖標(biāo)到本地,以便于搜索和利用。
二、方案設(shè)計(jì)
1.瀏覽器下載圖標(biāo)
設(shè)計(jì)方案并不是直接就想出來,還是要根據(jù)實(shí)際來一點(diǎn)一點(diǎn)地分析、確定。我們用瀏覽器來下載一個圖標(biāo)試一試。
目標(biāo):http://www.easyicon.net/iconsearch/iconset:fatcowhosting-icons/
在這個網(wǎng)址里,包含2000個(40頁)不同尺寸和格式和圖標(biāo)。fatcowhosting-icons就是這些圖標(biāo)集合的分類名稱。


單擊第一個圖標(biāo),進(jìn)入其他詳細(xì)頁面:http://www.easyicon.net/530832-Zoom_Selection_icon.html,這里我們可以看到很多參數(shù)信息。

點(diǎn)擊PNG圖標(biāo)下載,我們下載這個圖標(biāo)。(這一次的下載,就是以后代碼中最內(nèi)層循環(huán)的一段代碼。)我們看到了真實(shí)的下載地址:http://download.easyicon.net/png/530832/32/

只要我們有這個下載網(wǎng)址,無論在哪個瀏覽器或自定義程序,都可以進(jìn)行下載。
2.分析下載地址
來看每一頁的地址:
http://www.easyicon.net/iconsearch/iconset:fatcowhosting-icons/1/
fatcowhosting-icons表示圖標(biāo)集合名稱,1表示頁數(shù)
那我們來分析一下這個地址:http://download.easyicon.net/png/530832/32/
這個下載地址可分解為:固定部分+格式+圖標(biāo)編號+尺寸
再來看一下,下載需要的參數(shù):下載地址+文件保存路徑+文件名稱
綜合分析可以看出,圖標(biāo)的格式、尺寸、文件保存路徑可以由用戶指定,現(xiàn)在關(guān)鍵是缺少圖標(biāo)編號和文件名稱。
假如我們已經(jīng)知道了圖標(biāo)編號,并將下載網(wǎng)址輸入到瀏覽器的地址欄中提交,瀏覽器可自動識別出下載的文件名稱,這是為何?說明用戶向服務(wù)器提交這個地址后,服務(wù)器返回了一些消息,其中就包括文件名稱,所以,通過某種編程方式(后面會提到,暫不用著急去查詢),可以獲取到文件名稱。
好了,現(xiàn)在唯一缺少的主是圖標(biāo)編號了。通過觀察網(wǎng)站的其他圖標(biāo),可以發(fā)現(xiàn)這些編號都是連接的,比如530832是Zoom_Selection_icon的編號,而530831是Zoom_Refresh的編號;再看圖標(biāo)fatcowhosting-icons集合的每一頁都是50個(最后一頁除外),我們是不可以根據(jù)每一個圖標(biāo)和最后一個圖標(biāo)的編號來獲取這個圖標(biāo)集合的所有編號?答案是肯定的。
那我們怎么來獲取第一個和最后一個的編號?如果我們又通過某種技術(shù)手段獲取到這兩上編號了……等等,如果能獲取這兩個編號了,為什么不獲取直接獲取所有編號呢?是的,通過網(wǎng)頁抓取的某種方法應(yīng)該可以獲取所有編號。
3.畫一個簡單的流程圖
下面是使用億圖圖示專家V7.9繪制流程圖:

4.寫一個簡單的接口
分析了這么久,寫一個簡單的接口來理一下我們的思路。(C#)
private string[] FileType; //文件格式private int[] FileSize; //文件大小private string FilePath; //文件保存路徑private int TotalPages; //圖標(biāo)總頁數(shù)//獲取圖標(biāo)總頁數(shù)private int GetTotalPages(string iconsURL) { }//獲取當(dāng)前頁的編號private string[] GetIDs(string pageURL){}private bool DownICO(string[] fileType, int[] fileSize, int totalPages){ //一層:遍歷每一頁 for (int i = 0; i < totalPages; i++) { //獲取當(dāng)前頁所有編號 string[] strIDs = GetIDs("PagesURL"); //兩層:遍歷每一個編號 for (int j = 0; j < strIDs.Length; j++) { //三層:遍歷每一種尺寸 for (int k = 0; k < fileSize.Length; k++) { //四層:遍歷每一種格式 for (int m = 0; m < filePath.Length; m++) { //生成下載鏈接 string downURL = "http://download.easyicon.net/格式/編號/尺寸/"; Down(this.FilePath, downURL); //其他操作…… } }//4 }//3 }//2}//1//下載每一個圖標(biāo)private bool Down(string filePath,string downURL){}
5.關(guān)鍵問題
下面是代碼中使用的關(guān)鍵問題的解決方案:
(1)如果一切參數(shù)都能找到,用哪個類或方法來下載?System.Net.WebClient的DownloadFile方法。
(2)怎樣獲取圖標(biāo)總頁數(shù)?根據(jù)觀察網(wǎng)頁,每一頁都有"個圖標(biāo),翻X頁可看完",X即為總頁數(shù),通過抓取網(wǎng)頁字符串即可;
(3)怎樣獲取每一頁所有圖標(biāo)的編號?當(dāng)然還是通過網(wǎng)頁抓取。如下圖,通過審查元素,可以看到每一個圖標(biāo)的編號和名稱。

(4)怎樣獲取下載圖標(biāo)的名稱?有兩種方式,一是網(wǎng)頁內(nèi)容抓;二是通過根據(jù)服務(wù)返回的信息來提取。
三、編程實(shí)現(xiàn)
編程比較簡單,下面是網(wǎng)頁操作的兩個比較核心的函數(shù)(第一次抓取網(wǎng)頁,不知道這樣好不好)
第一個函數(shù),是通過網(wǎng)頁地址來獲取網(wǎng)頁代碼的。
/// <summary>/// 根據(jù)URL獲取網(wǎng)頁代碼/// </summary>/// <param name="strURL">URL地址</param>/// <returns>網(wǎng)頁代碼字符串</returns>public static string GetHtmlString(string strURL){ Uri uri = new Uri(strURL); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream stream = response.GetResponseStream(); string strHtml = ""; if (stream != null) { StreamReader sr = new StreamReader(stream); strHtml = sr.ReadToEnd(); sr.Close(); stream.Close(); response.Close(); } return strHtml;}
第二個函數(shù)主要是根據(jù)向服務(wù)器提交圖標(biāo)的下載鏈接,獲取返回的headers信息,這些信息里就包含了圖標(biāo)的名稱。
/// <summary>/// 根據(jù)URL獲取headers信息/// </summary>/// <param name="URL">URL地址</param>/// <returns>headers信息列表</returns>public static Dictionary<string, string> GetHeaders(string URL){ Dictionary<string, string> headerList = new Dictionary<string, string>(); WebRequest webRequestObject =HttpWebRequest.Create(URL); WebResponse responseObject =webRequestObject.GetResponse(); foreach (string headerKey in responseObject.Headers) { headerList.Add(headerKey, responseObject.Headers[headerKey]); } responseObject.Close(); return headerList;}
問題一:驗(yàn)證碼問題
編程其實(shí)并不是那么一蹴而就,或多或少會遇到一些之前沒有想到的問題
其中遇到最大的問題是驗(yàn)證問題。如果大量下載圖標(biāo)(第一次達(dá)166個圖標(biāo))時,向服務(wù)器提交下載地址時,它會彈出驗(yàn)證窗口,下面是用webBrowser控件得到的結(jié)果。


這是另外一個網(wǎng)頁http://www.easyicon.net/api/captcha/captcha.php返回的結(jié)果
解決:一開始的解決思路是去抓包,獲取提交鏈接和內(nèi)容,就像其他程序讓用戶打碼一樣;后來我就得反正是要打碼,還不如讓用戶直接看到這個頁面(當(dāng)然,這樣的界面顯示很粗糙,實(shí)際上應(yīng)該去獲取這個圖標(biāo),并將這個圖標(biāo)顯示在用戶面前),于是用了webBrowser控件;接下來,需要一個輸入,然后提交:輸入采用了VB中的InputBox,這樣更方便,不需要去暫停線程,提交就是用HtmlElement的GetAttribute來獲取提交按鈕,用InvokeMember方法來執(zhí)行。

問題二:程序假死問題
下載量過多,程序界面肯定會假死,用戶體驗(yàn)十分不好。需要新建線程,但要注意新線程與主線程之間的控件信息交互問題。
解決:下面是用委托來實(shí)現(xiàn)向ListBoxAdv添加下載返回的消息的函數(shù)。
delegate void SetValueCallback(ListBoxAdv lstA,string log);private void SetPropertyValue(ListBoxAdv lstA,string log){ if (lstA.InvokeRequired) { SetValueCallback d = new SetValueCallback(SetPropertyValue); lstA.Invoke(d, new object[] { lstA,log }); } else { lstA.Items.Add(log); lstA.SetSelected(lstA.Items.Count-1,true); lstA.SelectedIndex=lstA.Items.Count - 1; }}
調(diào)用:
SetPropertyValue(lstAdv, "消息……”);
問題三:下載失敗問題
并不是所有圖標(biāo)都能正常下載,即使多次反復(fù)下載,它容易出現(xiàn),下載結(jié)果只有25字節(jié)大小的圖標(biāo)(重復(fù)下載也無效),可能是因?yàn)榫W(wǎng)速的原因。
解決:遍歷所有25字節(jié)的圖標(biāo),刪除后重新下載(當(dāng)然也需要耗時)。
四、成果展示
主界面

下載的圖標(biāo)

我測試下載了png 32的圖標(biāo),約8000多個,本地和云盤都有,文件以編號+名稱命名,通過編號,我可以再從官網(wǎng)下載到其他需要的圖標(biāo),通過名稱可以搜索到需要的圖標(biāo)。

- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版














下載
下載
下載
下載
下載
下載
ESXi 6.0聯(lián)想定制版ESXi-6.0.0.update03-93 中文版
123云盤電腦版2.2.7 最新版
網(wǎng)盤極速下載器1.8.19 最新版
報(bào)紙下載器1.1.0 電腦版
GitHub下載器(GitHub資源下載神器)2.2 最新版
Bilidown嗶哩嗶哩B站視頻下載工具1.2.7 免費(fèi)版
pcstory蘑菇下載器v5.0.0.3 最新版
PanTools多網(wǎng)盤批量管理工具1.0.16 最新版
全能瞳下載器(Hitomi Downloader)1.0.0 最新版
TVBOX助手免安裝版2.2.0 最新版
speed百度網(wǎng)盤極速版1.0.0 免費(fèi)版
騰訊應(yīng)用寶電腦版1.0.11430.0 最新版
漫畫下載器無廣告v1.1.0 最新版
喜馬拉雅音頻下載軟件0.02 最新版
XX文庫下載器精簡版3.4 最新版
小白云盤pc端(64位)1.5.2 最新版
蝸牛云盤Windows版(阿里云盤電腦播放器)1.4.0 pc端
小白羊云盤PC版3.24.11315 最新版
B站視頻下載器(BilibiliVideoDownload)v3.3.3 最新版
鼠鼠下載器(B站視頻下載工具)1.1.1 最新版
XX文庫下載器電腦版1.3 吾愛破解
迅雷11正式版11.4.1.2030 官方最新版【離線版】
flashfxp中文版下載5.4.0.3970 已注冊免費(fèi)版
夠快云庫客戶端5.2.5.11010 官方最新版
Motrix下載器1.6.11 電腦最新版
HmDX很萌下載器(m3u8視頻下載助手)5.6.0 最新更新版
馬蜂窩原圖批量下載工具1.0 綠色免費(fèi)版
蒲公英windows客戶端1.0.2 官方最新版
FileZilla(支持?jǐn)帱c(diǎn)續(xù)傳的FTP客戶端)3.51.0 中文免費(fèi)版
藍(lán)奏云外鏈批量下載軟件1.0 最新版
七牛云圖床一鍵下載工具1.0 綠色中文版
視頻下載高手57.1免費(fèi)版
EagleGet(獵鷹下載器)2.1.5.20中文最新版
冰點(diǎn)文庫下載器3.2.10(1021) 官方版
啄木鳥圖片下載器標(biāo)準(zhǔn)版11.28.1官方版
火狐瀏覽器下載器Firefox Download Tool1.5.0.23漢化版





花瓣畫板圖片下載工具1.0 免費(fèi)版
全網(wǎng)通千圖網(wǎng)素材解析插件(支持?jǐn)?shù)字、谷歌、
嗶哩下載姬1.6.1 免費(fèi)版
易語言源碼采集下載工具1.0 實(shí)時更新版
嗨學(xué)網(wǎng)課程地址解析(可批量)1.2綠色版
酷狗AndQQ音樂無損下載器綠色免費(fèi)版
PDown百度網(wǎng)盤下載器1.0.19.142 綠色最新版
方配網(wǎng)站模板克隆器(FPWebClone)v1.0 官方免
羊羊微博相冊批量下載器1.0.0.0 綠色免費(fèi)版
唧唧down(b站視頻下載神器)1.229.1 最新版