• 批量下载图片


    1. 效果图

    2. 主要代码:

    private async void button_Click(object sender, RoutedEventArgs e)
            {
                var htmlContent = await FileDownLoader.Instance.GetAsync(webUrl.Text);
                HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                doc.LoadHtml(htmlContent);
                label1.Content = "";
                var nodeCollection=  doc.DocumentNode.SelectNodes("//img");
                if(nodeCollection!=null)
                {
                    string imgDirectory = System.IO.Path.Combine(Environment.CurrentDirectory, "Imgs");
                    if(!Directory.Exists(imgDirectory))
                    {
                        Directory.CreateDirectory(imgDirectory);
                    }
                    progressBar.Maximum = nodeCollection.Count;
                    progressBar.Value = 0;
                    int errorCount = 0;
                    foreach (var item in nodeCollection)
                    {
                        progressBar.Value += 1;
                        try
                        {
                            var imgSrc=item.GetAttributeValue("src", null);
                            MyImg img = new MyImg(imgSrc);
                            if(!string.IsNullOrEmpty(img.FileName))
                            {
                              await  FileDownLoader.Instance.DownLoadImg(img, imgDirectory);
                            }     
                        }
                        catch (Exception ex)
                        {
                            errorCount += 1;
                        }
                        label1.Content = "第"+progressBar.Value+"个图片,共"+ progressBar.Maximum+"个图片,"+errorCount+"个错误";
                    }
                    progressBar.Value = progressBar.Maximum;
    
                }
    

      

      public  class FileDownLoader
        {
            HttpClient httpClient = new HttpClient();
            public static FileDownLoader Instance = new FileDownLoader();
            public async Task DownLoadImg(MyImg img,string imgDirectory)
            {
                var imgData = await httpClient.GetByteArrayAsync(img.ImgSrc);
                string newfilename = System.IO.Path.Combine(imgDirectory, img.FileName);
                using (var stream = File.Open(newfilename, FileMode.Create))
                {
                    await stream.WriteAsync(imgData, 0, imgData.Length);
                };
            }
            public async Task<string> GetAsync(string url)
            {
             var response= await  httpClient.GetAsync(url);
                return await response.Content.ReadAsStringAsync();
            }
        }
    

     

        public class MyImg
        {
            public MyImg(string imgSrc)
            {
                if (imgSrc != null)
                {
                    var startIndex = imgSrc.LastIndexOf(@"/");
                    var startIndex1 = imgSrc.LastIndexOf(".");
                    FileName = imgSrc.Substring(startIndex + 1, startIndex1 - startIndex + 3);
                    ImgSrc = imgSrc;
                }
            }
            public string FileName { get; set; }
    
            public string ImgSrc { get; set; }
        }
    

      

  • 相关阅读:
    用Python实现QQ找茬游戏外挂工具
    Python常用模块
    将Qt 动态链接生成的exe及依赖dll打包方法
    Qt之VLFeat SLIC超像素分割(Cpp版)
    android studio下的NDK开发详解(一)
    条件注释判断浏览器版本<!--[if lt IE 9]>
    人脸识别中的八大难题,何时能解
    人脸识别简史与近期进展
    openCV之头文件分析
    看(学习)代码流程
  • 原文地址:https://www.cnblogs.com/LittleFeiHu/p/4823456.html
Copyright © 2020-2023  润新知