zoukankan      html  css  js  c++  java
  • 网站CSS背景图片抓取工具

    工具介绍:
      1)分析网页,获取页面图片。
      2)分析网页引用CSS文件,获取背景图片。
      3)批量下载。
    要点:
      1)正则

        LINK_PATTERN:获取页面所有连接

        BACKGROUND_IMAGE_PATTERN:获取CSS中背景图片地址
        CHECK_URL_PATTERN :检测URL是否有效

    代码
            private const string LINK_PATTERN = @"(href|src)=['""]?(?<link>[^'""\s]*)['""]?";
            
    private const string BACKGROUND_IMAGE_PATTERN = @"(url)\(['""]?(?<url>[^'""\s]*)['""]?\)";
            
    private const string CHECK_URL_PATTERN = @"^http(s)?://+([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";

      2)线程

    代码
            /// <summary>
            
    /// 线程
            
    /// </summary>
            private void DoWork()
            {
                
    //网页路径
                string url = txtUrl.Text.Trim();
                
    //保存路径
                string saveDir = txtSaveDir.Text.Trim();

                lvLog.Items.Clear();
                tsslStatus.Text 
    = DESC_ANALYSISING;
                tsslTime.Text 
    = string.Format(DESC_SPAND_TIME,0);
                tsslCount.Text 
    = string.Format(DESC_IMAGES_COUNT,0);
                tsslTotalTime.Text 
    = string.Format(DESC_DOWNLOAD_TOTAL_TIME,0);
                btnDownload.Enabled 
    = false;

                Application.DoEvents();
                AnalyzeAndDownload(url, saveDir);
            }

          3)网页分析:

    代码
            /// <summary>
            
    /// 根据网站URL获取CSS
            
    /// 分析CSS获取背景图片地址
            
    /// </summary>
            
    /// <param name="url"></param>
            
    /// <returns></returns>
            protected List<Uri> FetchCSSWithSite(string url)
            {
                StringBuilder sourceCSS 
    = new StringBuilder();
                List
    <Uri> list = new List<Uri>();
                
    using (WebClient client = new WebClient())
                {
                    _basicUri 
    = new Uri(url);
                    
    string sourceHtml = client.DownloadString(_basicUri);
                    sourceCSS.Append(sourceHtml);
                    Regex regex 
    = new Regex(LINK_PATTERN, RegexOptions.IgnoreCase);
                    MatchCollection collection 
    = regex.Matches(sourceHtml);
                    
    if (collection == nullreturn null;
                    
    string extension = string.Empty;
                    
    string link = string.Empty;
                    
    foreach (Match match in collection)
                    {
                        link
    =match.Groups["link"].Value;
                        lvLog.Items.Add(
    new ListViewItem(new string[] { new Uri(_basicUri, link).AbsoluteUri, DateTime.Now.ToString(TIME_FORMAT), STATUS_ANALYSIS, string.Empty, link.Contains("."? link.Substring(link.LastIndexOf('.')) : string.Empty }));

                        
    if (!link.Contains(".")) continue;
                        extension 
    = link.Substring(link.LastIndexOf('.'));
                        
    switch (extension.ToUpper())
                        {
                            
    case ".CSS":
                                sourceCSS.Append(client.DownloadString(
    new Uri(_basicUri, link)));
                                
    break;
                            
    case ".GIF":
                            
    case ".PNG":
                            
    case ".JPG":
                            
    case ".JPEG":
                                list.Add(
    new Uri(_basicUri, link));
                                
    break;
                            
    default:
                                
    break;
                        }
                    }
                }
                list.AddRange(FetchBGImageUrlsWithCSS(sourceCSS.ToString()));

                
    return list;
            }

        4)效果图

    下载地址:/Files/olartan/BID.zip

    作者:Olar Tan
    出处:http://www.cnblogs.com/olartan
    ♪:没有做不到的 只有偷懒而错过的 ♪

  • 相关阅读:
    cstring string 比较之二(学习笔记)
    转 大话设计模式学习笔记(思维导图) 更新中
    转 十三种设计模式的思维导图
    (转)关于栈、堆、静态存储区最大可分配大小的探讨 海量之一
    如何学习网络协议(学习笔记)
    境界篇:linux 驱动开发的境界(学习笔记)
    b.关于vc编程境界的讨论
    关于编程境界的小结
    Java异常(一) Java异常简介及其架构
    多线程简单阐述
  • 原文地址:https://www.cnblogs.com/olartan/p/1695271.html
Copyright © 2011-2022 走看看