zoukankan      html  css  js  c++  java
  • 用正则表达式自动下载网页中的图片

    首先获得网页的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

  • 相关阅读:
    MongoDB 学习笔记(七):主从复制与副本集
    MongoDB 学习笔记(六):备份与用户管理
    MongoDB 学习笔记(五):固定集合、GridFS文件系统与服务器端脚本
    MongoDB 学习笔记(四):索引
    MongoDB 学习笔记(三):分页、排序与游标
    MongoDB 学习笔记(一):安装及简单shell操作
    MongoDB 学习笔记(二):shell中执行增删查改
    mongoDB 入门指南、示例
    mongoDB 介绍(特点、优点、原理)
    企业级任务调度框架Quartz(7) 线程在Quartz里的意义(1)
  • 原文地址:https://www.cnblogs.com/captain_ccc/p/1530323.html
Copyright © 2011-2022 走看看