ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用正则表达式自动下载网页中的图片

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

原创 Linux操作系统 作者:iDotNetSpace 时间:2009-07-24 16:55:29 0 删除 编辑
首先获得网页的Html代码,然后用正则表达式分析其中图片的下载地址,最后自动逐个下载。


 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
<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 + @"(?[^""]*?)"">(?[^<]*?)", 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<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部分代码如下:

alt="" src="/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEERT09">BMW 3-seriesdt>\par
alt
="" src="/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEEEE01">Toyotadt>\par
alt
="" src="/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEEJY25">Polo crossdt>\par
alt
="" src="/docfile/dyn/12345678LANGCCCCDDDDEEEEEEEEMO02">Golf 4.5dt>\par

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

正则表达式部分如下:

@"/docfile/dyn/(?[^""]*?)"">(?[^<]*?)"

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-610370/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 只求简单易懂
请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5297316