用正则表达式自动下载网页中的图片

首先获得网页的Html代码,然后用正则表达式分析其中图片的下载地址,最后自动逐个下载。


 using System.Net;
 
 
///<summary>
 
/// Download Image from website
 
/// better to put into threads
 
/// </summary>

 private void DownloadImage()
 
{
      WebClient c 
= new WebClient();

      
//Get html code
      string content = c.DownloadString(Uri);
      
      Collection
<string> address = new Collection<string>();
      Collection
<string> name = new Collection<string>();
      
      
//Analyse html code to get images address(Uri) and (Name) list
      ParseHtml(content, Prefix, PicUriPrefix + @"(?<Uri>[^""]*?)"">(?<Name>[^<]*?)</dt>", address, name);
      
      
if (address.Count > 0 && name.Count > 0 && address.Count == name.Count)
      
{
          
if (Directory.Exists(folder) == false) Directory.CreateDirectory(folder);//Create folder
      
          
foreach (string add in address)
          
{
              
//Download images one by one
              c.DownloadFile(add, Path.Combine(folder, name[address.IndexOf(add)] + ".jpg"));
          }

      }

  }


  
/// <summary>
  
/// Parse Html using regular expressions
  
/// </summary>
  
/// <param name="content">Html content</param>
  
/// <param name="prefix">Uri prefix</param>
  
/// <param name="expression">regular expression</param>
  
/// <param name="address">Image addresses collection</param>
  
/// <param name="name">Image names collection</param>

  private void ParseHtml(string content, string prefix, string expression, Collection<string> address, Collection<string> name)
  
{
      
if (String.IsNullOrEmpty(expression) || address == null || name == nullreturn;

      Regex re 
= new Regex(expression, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.RightToLeft);
      MatchCollection mc 
= re.Matches(content);
                
      
if (mc == null || mc.Count == 0return;

      
foreach (Match m in mc)
      
{
          address.Add(prefix 
+ m.Groups["Uri"].Value);
         name.Add(m.Groups[
"Name"].Value);
      }

  }
 

Html部分代码如下:
Html code

要用正则表达式从中获得图片下载地址(例如:/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEERT09)和图片名称(例如:BMW 3-series

正则表达式部分如下:
Regular expression

注意其中group的用法(? *?),和引号的匹配用法,匹配双引号前面需要再带一个双引号。其中Uri这个group在dyn/后面,直到双引号结束;后面跟随着双引号和>,然后就是Name这个group;它以<号结束,最后跟随</dt>。

本文引用于:http://www.cnblogs.com/Mainz/articles/1087460.html

posted on 2009-07-24 16:31  船长  阅读(687)  评论(0编辑  收藏  举报