zoukankan      html  css  js  c++  java
  • 在C#中使用正则表达式筛选出图片URL并下载图片URL中的图片到本地

        本功能主要用到的知识点如下:

       1、正则表达式

       2、C#中下载文件功能的实现

       3、泛型集合的使用

       4、进程的简单操作(用于结束当前程序)

           下面就简单说一下是如何使用这些知识点的。先详细说下这个程序主要实现的功能是什么,现有一个文本文件里面都是从网页上复制下来的源代码。现需要将其中的以http、https、ftp开头,以.jpg,.png,.gif开头的图片URL地址筛选出来,并去访问这些链接,将URL中所对应的图片下载下来。经过分析后。决定使用正则表达式筛选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的正则表达式
     15             Regex reg = new Regex(regexStr, RegexOptions.IgnoreCase);//正则表达式的类实例化
     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+@"	est.txt");//读入文件
    106                List<string> temp = getUrl(source);//筛选URL
    107                Console.WriteLine("筛选后的URL地址如下:");
    108                foreach (string t in temp)
    109               {
    110                 Console.WriteLine(t.ToString());//输入URL
    111                }
    112                Console.WriteLine("正在下载图片……");
    113                downLoad(temp);//下载图片
    114                Console.WriteLine("
    下载结束,按任意键退出");
    115                Console.ReadKey();
    116         }//主函数
    117     }
    118 }
    View Code

    难点是:

    1、正则表达式的构建,因为才接触到正则表达式,所以对于其正则表达式的构建不是很熟悉,自己也在百度了查了不少的资料。也看过别人的写的一些相似的正则表达式后。才写出了这个正则表达式。

    2、异常的处理。比如文件打开失败,下载失败。未得到正确的URL地址等等。(解决方案:添加上try和catch在catch中用到了当前进程的结束)。

  • 相关阅读:
    java字节中的基本类型的职业的数目 (采访总是问)
    hdu 1814 Peaceful Commission (2-sat 输出字典序最小的路径)
    Ubuntu Server 14.04 LTS(64bit)已安装 weblogic Server 12c(12.1.3) Zip Distribution
    Tyvj P1015 公路骑 (DP)
    编程算法
    POJ 2502 Subway (Dijkstra 最短+建设规划)
    android_Activity生命周期功能
    ftk学习记录(脚本文章)
    2013年周二
    2013年第32周星期1
  • 原文地址:https://www.cnblogs.com/ZERO-TAO/p/5559420.html
Copyright © 2011-2022 走看看