用正規表示式自動下載網頁中的圖片

iDotNetSpace發表於2009-07-24
首先獲得網頁的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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章