在C#中使用Regex篩選出圖片URL並下載圖片URL中的圖片到本地

來源:互聯網
上載者:User

標籤:

    本功能主要用到的知識點如下:

   1、Regex

   2、C#中下載檔案功能的實現

   3、泛型集合的使用

   4、進程的簡單操作(用於結束當前程式)

       下面就簡單說一下是如何使用這些知識點的。先詳細說下這個程式主要實現的功能是什麼,現有一個文字檔裡面都是從網頁上複製下來的原始碼。現需要將其中的以http、https、ftp開頭,以.jpg,.png,.gif開頭的圖片URL地址篩選出來,並去訪問這些連結,將URL中所對應的圖片下載下來。經過分析後。決定使用Regex篩選URL地址。並使用WebClient類去實現下載的功能。代碼如下:

  1 using System.Text.RegularExpressions;  2 using System;  3 using System.Net;  4 using System.IO;  5 using System.Diagnostics;  6 using System.Collections.Generic;  7 namespace URLRegex  8 {  9     class Program 10     { 11         public static List<string> getUrl(string data) 12         { 13             List<string> strUrl= new List<string>();//定義泛型,用於存放抓取的URL 14             string regexStr = @"(http|ftp|https)://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)+\.(png|jpg|gif)";//尋找URL的Regex 15             Regex reg = new Regex(regexStr, RegexOptions.IgnoreCase);//Regex的類執行個體化 16             MatchCollection mc = reg.Matches(data);//進行匹配 17             if (mc.Count <= 0)//判斷沒有抓取到一條合法的URL 18             { 19                 Console.WriteLine("未抓取到合格URL,按任意鍵退出程式"); 20                 Console.ReadKey(); 21                 Process.GetCurrentProcess().Kill(); 22             } 23             for (int i = 0; i < mc.Count; i++) 24             { 25                 strUrl.Add(mc[i].Groups[0].Value);//將匹配的資料裝入泛型集合 26             } 27             return strUrl;//返回這個泛型集合 28  29         }//得到URL 30  31         public static void downLoad(List<string> tempUrl) 32         { 33  34             string currentPath = System.Environment.CurrentDirectory;//得到目前的目錄 35             Directory.CreateDirectory(currentPath + @"\photos\");//在目前的目錄下建立photos檔案夾 36             string currentPathPhotos = currentPath + @"\photos\";//得到photos的路徑 37  38             WebClient myDownload = new WebClient();//執行個體化webclient類,用於下載 39             int i = 1; //用於圖片的命名 40             Regex regJPG = new Regex(".jpg", RegexOptions.RightToLeft);//判斷圖片是不是.jpg格式 41             Regex regPNG = new Regex(".png", RegexOptions.RightToLeft);//判斷圖片是不是.png格式 42  43             foreach (string temp in tempUrl)//遍曆擷取到的圖片URL,並下載和儲存 44             { 45                 Match mJpg = regJPG.Match(temp); 46                 if (mJpg.Success) 47                 { 48                     string filePathJpg = currentPathPhotos + i + ".jpg"; 49                     try 50                     { 51                         myDownload.DownloadFile(temp, filePathJpg); 52                         Console.WriteLine("下載成功"); 53                         i++; 54                     } 55                     catch 56                     { 57                         Console.WriteLine("下載失敗"); 58                     } 59  60                 } 61                 else 62                 { 63                     Match mPng = regPNG.Match(temp); 64  65                     if (mPng.Success) 66                     { 67                         string filePathPng = currentPathPhotos + i + ".png"; 68                         try 69                         { 70                             myDownload.DownloadFile(temp, filePathPng); 71                             Console.WriteLine("下載成功"); 72                             i++; 73                         } 74                         catch 75                         { 76                             Console.WriteLine("下載失敗"); 77                         } 78  79                     } 80                     else 81                     { 82                         string filePathgif = currentPathPhotos + i + ".gif"; 83                         try 84                         { 85                             myDownload.DownloadFile(temp, filePathgif); 86                             Console.WriteLine("下載成功"); 87                             i++; 88                         } 89                         catch 90                         { 91                             Console.WriteLine("下載失敗"); 92                         } 93                     } 94  95                 } 96  97             } 98  99             Process.Start("explorer", currentPathPhotos);//完成後立即呈現結果100         }//實現下載101 102         public static void Main()103         {104                string currentPath = Environment.CurrentDirectory;   105                string source= File.ReadAllText(currentPath+@"\test.txt");//讀入檔案106                List<string> temp = getUrl(source);//篩選URL107                Console.WriteLine("篩選後的URL地址如下:");108                foreach (string t in temp)109               {110                 Console.WriteLine(t.ToString());//輸入URL111                }112                Console.WriteLine("正在下載圖片……");113                downLoad(temp);//下載圖片114                Console.WriteLine("\n下載結束,按任意鍵退出");115                Console.ReadKey();116         }//主函數117     }118 }
View Code

 

痛點是:

1、Regex的構建,因為才接觸到Regex,所以對於其Regex的構建不是很熟悉,自己也在百度了查了不少的資料。也看過別人的寫的一些相似的Regex後。才寫出了這個Regex。

2、異常的處理。比如檔案開啟失敗,下載失敗。未得到正確的URL地址等等。(解決方案:添加上try和catch在catch中用到了當前進程的結束)。

在C#中使用Regex篩選出圖片URL並下載圖片URL中的圖片到本地

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.