c#实现网页图片提取工具代码分享

 更新时间:2013年12月26日 10:20:31   作者:  
c#实现网页图片提取工具代码分享,大家参考使用吧

复制代码 代码如下:

public Array MatchHtml(string html,string com)
       {
           List<string> urls = new List<string>();
           html = html.ToLower();
           //获取SRC标签中的URL
           Regex regexSrc = new Regex("src=\"[^\"]*[(.jpg)(.png)(.gif)(.bmp)(.ico)]\"");
           foreach(Match m in regexSrc.Matches(html))
           {
               string src = m.Value;
               src = src.Replace("src=","").Replace("\"","");
               if (!src.Contains("http"))
                   src = com + src;
               if(!urls.Contains(src))
               urls.Add(src);
           }
           //获取HREF标签中URL
           Regex regexHref = new Regex("href=\"[^\"]*[(.jpg)(.png)(.gif)(.bmp)(.ico)]\"");
           foreach (Match m in regexHref.Matches(html))
           {
               string href = m.Value;
               href = href.Replace("href=", "").Replace("\"", "");
               if (!href.Contains("http"))
                   href = com + href;
               if(!urls.Contains(href))
               urls.Add(href);
           }
           return urls.ToArray();
       }

复制代码 代码如下:

[DllImport("kernel32.dll")]
       static extern bool SetConsoleMode(IntPtr hConsoleHandle, int mode);
       [DllImport("kernel32.dll")]
       static extern bool GetConsoleMode(IntPtr hConsoleHandle, out int mode);
       [DllImport("kernel32.dll")]
       static extern IntPtr GetStdHandle(int handle);
       const int STD_INPUT_HANDLE = -10;
       const int ENABLE_QUICK_EDIT_MODE = 0x40 | 0x80;
       public static void EnableQuickEditMode()
       {
           int mode; IntPtr handle = GetStdHandle(STD_INPUT_HANDLE);
           GetConsoleMode(handle, out mode);
           mode |= ENABLE_QUICK_EDIT_MODE;
           SetConsoleMode(handle, mode);
       }
       static void Main(string[] args)
       {
           EnableQuickEditMode();
           int oldCount = 0;
           Console.Title = "TakeImageFromInternet";
           string path = "E:\\Download\\loading\\";
           while (true)
           {
               Console.Clear();
               string countFile = "E:\\CountFile.txt";//用来计数的文本,以至于文件名不重复
               int cursor = 0;
               if (File.Exists(countFile))
               {
                   string text = File.ReadAllText(countFile);
                   try
                   {
                       cursor =oldCount = Convert.ToInt32(text);//次数多了建议使用long
                   }
                   catch { }
               }
               Console.Write("please input a url:");
               string url = "http://www.baidu.com/";
               string temp = Console.ReadLine();
               if (!string.IsNullOrEmpty(temp))
                   url = temp;
               Match mcom = new Regex(@"^(?i)http://(\w+\.){2,3}(com(\.cn)?|cn|net)\b").Match(url);//获取域名
               string com = mcom.Value;
               //Console.WriteLine(mcom.Value);
               Console.Write("please input a save path:");
               temp = Console.ReadLine();
               if (Directory.Exists(temp))
                   path = temp;
               Console.WriteLine();
               WebClient client = new WebClient();
               byte[] htmlData = null;
               htmlData = client.DownloadData(url);
               MemoryStream mstream = new MemoryStream(htmlData);
               string html = "";
               using (StreamReader sr = new StreamReader(mstream))
               {
                   html = sr.ReadToEnd();
               }
               Array urls = new MatchHtmlImageUrl().MatchHtml(html,com);

               foreach (string imageurl in urls)
               {
                  Console.WriteLine(imageurl);
                   byte[] imageData = null;
                   try
                   {
                       imageData = client.DownloadData(imageurl);
                   }
                   catch { }
                   if (imageData != null && imageData.Length>0)
                       using (MemoryStream ms = new MemoryStream(imageData))
                       {
                           try
                           {

                               string ext = Aping.Utility.File.FileOpration.ExtendName(imageurl);
                               ImageFormat format = ImageFormat.Jpeg;
                               switch (ext)
                               {
                                   case ".jpg":
                                       format = ImageFormat.Jpeg;
                                       break;
                                   case ".bmp":
                                       format = ImageFormat.Bmp;
                                       break;
                                   case ".png":
                                       format = ImageFormat.Png;
                                       break;
                                   case ".gif":
                                       format = ImageFormat.Gif;
                                       break;
                                   case ".ico":
                                       format = ImageFormat.Icon;
                                       break;
                                   default:
                                       continue;
                               }
                               Image image = new Bitmap(ms);
                               if (Directory.Exists(path))
                                   image.Save(path + "\\" + cursor + ext, format);
                           }
                           catch(Exception ex) { Console.WriteLine(ex.Message); }
                       }
                   cursor++;
               }
               mstream.Close();
               File.WriteAllText(countFile, cursor.ToString(), Encoding.UTF8);
               Console.WriteLine("take done...image count:"+(cursor-oldCount).ToString());
           }           
       }

相关文章

  • Unity实现移动物体到鼠标点击位置

    Unity实现移动物体到鼠标点击位置

    这篇文章主要为大家详细介绍了Unity实现移动物体到鼠标点击位置,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C#创建Windows服务与服务的安装、卸载

    C#创建Windows服务与服务的安装、卸载

    这篇文章介绍了C#创建Windows服务与服务的安装、卸载,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • c# 在windows服务中 使用定时器实例代码

    c# 在windows服务中 使用定时器实例代码

    这篇文章主要介绍了c# 在windows服务中 使用定时器实例代码,有需要的朋友可以参考一下
    2013-12-12
  • WPF中图像处理的方法介绍

    WPF中图像处理的方法介绍

    这篇文章介绍了WPF中图像处理的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • WCF实现进程间管道通信Demo分享

    WCF实现进程间管道通信Demo分享

    下面小编就为大家分享一篇WCF实现进程间管道通信Demo,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C# 批量生成随机密码必须包含数字和字母并用加密算法加密

    C# 批量生成随机密码必须包含数字和字母并用加密算法加密

    这篇文章主要介绍了C# 批量生成随机密码必须包含数字和字母并用加密算法加密,需要的朋友参考下
    2017-01-01
  • C#串口连接的读取和发送详解

    C#串口连接的读取和发送详解

    这篇文章主要给大家介绍了关于C#串口连接的读取和发送的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 浅谈C#中Process类的使用详解

    浅谈C#中Process类的使用详解

    本篇文章是对C#中Process类的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#如何给枚举类型增加一个描述特性详解

    C#如何给枚举类型增加一个描述特性详解

    这篇文章主要给大家介绍了关于C#如何给枚举类型增加一个描述特性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • c# 模拟线性回归的示例

    c# 模拟线性回归的示例

    这篇文章主要介绍了c# 模拟线性回归的示例,帮助大家利用c#进行机器学习,感兴趣的朋友可以了解下
    2020-10-10

最新评论