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

  原文网址:http://blog.csdn.net/yizhiduxiu11/archive/2010/09/ 13/5881442.aspx
  首先获得网页的Html代码,然后用正则表达式分析其中图片的下载地址,最后自动逐个下载。
  Code
  using System.Net;
  /**/
  /// Download Image from website
  /// better to put into threads
  ///
  private void DownloadImage()
  {
  WebClient c = new WebClient();
  //Get html code
  string content = c.DownloadString(Uri);
  Collection address = new Collection();
  Collection name = new Collection();
  //Analyse html code to get images address(Uri) and (Name) list
  ParseHtml(content, Prefix, PicUriPrefix + @"(?[^""]*?)"">(?[^", 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"));
  }
  }
  }
  /**
  /// Parse Html using regular expressions
  ///
  /// Html content
  /// Uri prefix
  /// regular expression
  /// Image addresses collection
  /// Image names collection
  private void ParseHtml(string content, string prefix, string expression, Collection address, Collection name)
  {
  if (String.IsNullOrEmpty(expression) || address == null || name == null) return;
  Regex re = new Regex(expression, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.RightToLeft);
  MatchCollection mc = re.Matches(content);
  if (mc == null || mc.Count == 0) return;
  foreach (Match m in mc)
  {
  address.Add(prefix + m.Groups["Uri"].Value);
  name.Add(m.Groups["Name"].Value);
  }
  }
  Html部分代码如下:
  Html code
  alt="" src="/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEERT09 ">BMW 3-series\par
  alt="" src="/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEEEE01 ">Toyota\par
  alt="" src="/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEEJY25 ">Polo cross\par
  alt="" src="/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEEMO02 ">Golf 4.5\par
  要用正则表达式从中获得图片下载地址(例如:/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEERT09)和图片名称(例如:BMW 3-series)
  正则表达式部分如下:
  Regular expression
  @"/docfile/dyn/(?[^""]*?)"">(?[^"
  注意其中group的用法(? *?),和引号的匹配用法,匹配双引号前面需要再带一个双引号。其中Uri这个group在dyn/后面,直到双引号结束;后面跟随着双引号和>,然后就是Name这个group;它以。
  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yizhiduxiu11/archive/2010/09/ 13/5881442.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值