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; } }
新闻热点
疑难解答