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

1、正则表达式

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

3、泛型集合的使用

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

下面就简单说一下是如何使用这些知识点的。先详细说下这个程序主要实现的功能是什么,现有一个文本文件里面都是从网页上复制下来的源代码。现需要将其中的以http、https、ftp开头,以.jpg,.png,.gif开头的图片URL地址筛选出来,并去访问这些链接,将URL中所对应的图片下载下来。经过分析后。决定使用正则表达式筛选URL地址。并使用WebClient类去实现下载的功能。代码如下:

 using System.Text.RegularExpressions;
using System;
using System.Net;
using System.IO;
using System.Diagnostics;
using System.Collections.Generic;
namespace URLRegex
{
class Program
{
public static List<string> getUrl(string data)
{
List<string> strUrl= new List<string>();//定义泛型,用于存放抓取的URL
string regexStr = @"(http|ftp|https)://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)+\.(png|jpg|gif)";//查找URL的正则表达式
Regex reg = new Regex(regexStr, RegexOptions.IgnoreCase);//正则表达式的类实例化
MatchCollection mc = reg.Matches(data);//进行匹配
if (mc.Count <= )//判断没有抓取到一条合法的URL
{
Console.WriteLine("未抓取到符合条件的URL,按任意键退出程序");
Console.ReadKey();
Process.GetCurrentProcess().Kill();
}
for (int i = ; i < mc.Count; i++)
{
strUrl.Add(mc[i].Groups[].Value);//将匹配的数据装入泛型集合
}
return strUrl;//返回这个泛型集合 }//得到URL public static void downLoad(List<string> tempUrl)
{ string currentPath = System.Environment.CurrentDirectory;//得到当前目录
Directory.CreateDirectory(currentPath + @"\photos\");//在当前目录下创建photos文件夹
string currentPathPhotos = currentPath + @"\photos\";//得到photos的路径 WebClient myDownload = new WebClient();//实例化webclient类,用于下载
int i = ; //用于图片的命名
Regex regJPG = new Regex(".jpg", RegexOptions.RightToLeft);//判断图片是不是.jpg格式
Regex regPNG = new Regex(".png", RegexOptions.RightToLeft);//判断图片是不是.png格式 foreach (string temp in tempUrl)//遍历获取到的图片URL,并下载和保存
{
Match mJpg = regJPG.Match(temp);
if (mJpg.Success)
{
string filePathJpg = currentPathPhotos + i + ".jpg";
try
{
myDownload.DownloadFile(temp, filePathJpg);
Console.WriteLine("下载成功");
i++;
}
catch
{
Console.WriteLine("下载失败");
} }
else
{
Match mPng = regPNG.Match(temp); if (mPng.Success)
{
string filePathPng = currentPathPhotos + i + ".png";
try
{
myDownload.DownloadFile(temp, filePathPng);
Console.WriteLine("下载成功");
i++;
}
catch
{
Console.WriteLine("下载失败");
} }
else
{
string filePathgif = currentPathPhotos + i + ".gif";
try
{
myDownload.DownloadFile(temp, filePathgif);
Console.WriteLine("下载成功");
i++;
}
catch
{
Console.WriteLine("下载失败");
}
} } } Process.Start("explorer", currentPathPhotos);//完成后立即呈现结果
}//实现下载 public static void Main()
{
string currentPath = Environment.CurrentDirectory;
string source= File.ReadAllText(currentPath+@"\test.txt");//读入文件
List<string> temp = getUrl(source);//筛选URL
Console.WriteLine("筛选后的URL地址如下:");
foreach (string t in temp)
{
Console.WriteLine(t.ToString());//输入URL
}
Console.WriteLine("正在下载图片……");
downLoad(temp);//下载图片
Console.WriteLine("\n下载结束,按任意键退出");
Console.ReadKey();
}//主函数
}
}

难点是:

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

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

在C#中使用正则表达式筛选出图片URL并下载图片URL中的图片到本地的更多相关文章

  1. 在没有界面的类中,实现弹出UIAlertView || 在没有界面的类中,刷新程序界面 思路

    +(DisplayErrorMsg *)sharedDisplayErrorMsg { static DisplayErrorMsg *instance = nil; @synchronized(in ...

  2. Java Springboot 根据图片链接生成图片下载链接 及 多个图片打包zip下载链接

    现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式. 现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载.由于前端存在跨域问题, ...

  3. SQL Server 2008 R2——创建函数 筛选出字符串中的数字 筛选出字符串中的非数字

    =================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载  请通过右 ...

  4. asp.net core 2.2 中的过滤器/筛选器(上)

    ASP.NET Core中的过滤器/筛选器 通过使用 ASP.NET Core MVC 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码. 注意:本主题不适用于 Razor 页面. ASP. ...

  5. C# 网络编程之webBrowser获取网页url和下载网页中图片

    该文章主要是通过C#网络编程的webBrowser获取网页中的url并简单的尝试瞎子啊网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识.正则表达式实现浏览.获取url. ...

  6. groovy中的正则表达式操作符【groovy】

    groovy中对于正则表达式的书写进行了简化,同时引入了新的操作符,使得正则表达式使用起来比较方便简单. 对于书写的改进: 比如 assert "\\d" == /\d/ 也就是在 ...

  7. 关于Lab3中对于正则表达式的应用

    在这里记录一下关于软件构造课程Lab3中关于正则表达式的应用. 在实验内容中,要求用正则表达式来匹配读入文件的内容,从而取得构建图需要的相关信息. 举个例子,读入的文件(GraphPoetTestFi ...

  8. python图片爬虫 - 批量下载unsplash图片

    前言 unslpash绝对是找图的绝佳场所, 但是进网站等待图片加载真的令人捉急, 仿佛是一场拼RP的战争 然后就开始思考用爬虫帮我批量下载, 等下载完再挑选, 操作了一下不算很麻烦, 顺便也给大家提 ...

  9. 如何从两个List中筛选出相同的值

    问题 现有社保卡和身份证若干,想要匹配筛选出一一对应的社保卡和身份证. 转换为List socialList,和List idList,从二者中找出匹配的社保卡. 模型 创建社保卡类 /** * @a ...

随机推荐

  1. spring boot 在IDEA控制台中打印彩色日志

    只需要在application.properties中加入 spring.output.ansi.enabled=ALWAYS 即可

  2. Jade模板引擎学习(二)语法:代码、变量、循环、过滤器及mixin

    Jade语法 一.代码 不会被缓冲代码 ul - for(var i=0; i; i++) li Jade Engine 会转换为: <ul> <li>Jade Engine& ...

  3. css 常用苹方字体

    // 苹方-简 常规体 font-family: PingFangSC-Regular, sans-serif; // 苹方-简 极细体 font-family: PingFangSC-Ultrali ...

  4. 2017 济南综合班 Day 4

    T1 外星人 二维前缀和 #include<cstdio> #define N 1001 using namespace std; bool v[N][N]; int sum[N][N]; ...

  5. struts2常用标签之数据标签

    数据标签1  property标签  property标签的主要属性:  value:用来获取值的OGNL表达式,如果value属性值没有指定,那么将会被设定为top,也就是返回位于值栈最顶端的对象. ...

  6. Maven-Optional Dependencies & Dependency Exclusion

    本文讨论可选依赖和排除依赖.  帮助用户理解它们是什么, 如何使用, 它们如何工作, 以及什么时候使用它们最合适. 本文也将解释为什么排除是基于单个依赖的, 而非POM级别的. Optional De ...

  7. UnknownHostException

    1.查看Centos版本号,不同版本修改的方式可能不一样 cat /etc/issue 查看版本 2.通过hostname命令查看当前主机名 hostname 3.编辑network文件修改hostn ...

  8. Centos 6 FTP 配置

    How to configure ftp server on centos 6 Posted  krizna  Centos FTP – File transfer protocol is used ...

  9. PHP练习4 留言板

    一.要求 二.示例页面 三.网页代码及网页显示 1.denglu.php  登录页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  10. Less & Sass

    CSS不是一种编程语言.它开发网页样式,但是没法用它编程.也就是说,CSS基本上是设计师的工具,它没有变量,也没有条件语句,只是一行行单纯的描述.有人就开始为CSS加入编程元素,这被叫做"C ...