C#使用HtmlAgilityPack解析Html 爬取圖片和視頻


HtmlAgilityPack簡介

HtmlAgilityPack是.net下的一個HTML解析類庫。支持用XPath來解析HTML。

問題來了,有人就會問為什么要使用能XPath呢? 小編答:因為對於在web端界面上的元素的xpath,在大部分游覽器能夠直接獲取到,不用手動寫。

✍對於HtmlAgilityPack總結:通過這個類庫,先通過瀏覽器獲取到xpath獲取到節點內容然后再通過正則表達式匹配所需要的內容。

🤖使用HtmlAgilityPack庫的操作流程

     👀工具VS2022

NuGet包進行下載安裝

👺HtmlAgilityPack庫的一些類的說明

  • HtmlAttribute--Html元素的屬性
  • HtmlAttributeCollection--一個元素屬性的集合
  • HtmlNode--HTML節點,包括注釋,文本,元素等
  • HtmlNodeCollection--一個HtmlNode節點集合
  • HtmlNodeType--一個枚舉 表示節點的類型,文檔,注釋,元素,文本
  • HtmlTextNode--Html文本節點
  • HtmlEntity--對應實體
  • HtmlParseError--表示文檔在解析過程中發現解析錯誤
  • 👇下面示例適配部分沒有反編譯的---初步學習使用
private void Button_Click(object sender, RoutedEventArgs e) {
    //這里因為網頁上有些是動態獲取數據,所以引入了一個第三個庫,使用里面的一個WebView2控件獲取網頁數據
            webView.Source = new Uri(txt.Text);
        }

        private void Button_Click_1(object sender, RoutedEventArgs e) {
            GetMedia(".//img", @"下載路徑");
        }

        private void Button_Click_2(object sender, RoutedEventArgs e) {
            GetMedia(".//video", @"下載路徑");
            GetMedia(".//source", @"下載路徑");
        }
        HtmlDocument doc=new HtmlDocument();
        public async void GetMedia(string parameter, string dir) {
            var str = "";
            //解決網頁亂碼和不適配
            object obj = await webView.CoreWebView2.ExecuteScriptAsync("document.documentElement.outerHTML");
            str=Regex.Unescape(obj.ToString()).Replace("\"<html>", "<html>").Replace("</html>\"", "</html>");
            doc.LoadHtml(str);
            var elements = doc.DocumentNode.SelectNodes(parameter);
            if (elements != null) {
                foreach (var el in elements) {
                    if (el.Attributes.Contains("src")) {
                        var url = el.Attributes["src"].Value;
                        if (!string.IsNullOrEmpty(url) && url.StartsWith("http")) { 
                            Uri uri = new Uri(url);
                            var fileName=uri.Segments.Last().ToLower();
                            DownLoad(url, $@"{dir}{fileName}");
                        }
                    }
                }
            }
        }

        public static bool DownLoad(string uri, string localFileName) {
            try {
                string ext = Path.GetExtension(localFileName);
                if (string.IsNullOrEmpty(ext)) {
                    localFileName += ".png";
                }
                var server = new Uri(uri);
                var p = Path.GetDirectoryName(localFileName);
                if (!Directory.Exists(p)) Directory.CreateDirectory(p);

                // 發起請求並異步等待結果
                var httpClient = new HttpClient();
                var responseMessage = httpClient.GetAsync(server).Result;
                if (responseMessage.IsSuccessStatusCode) {
                    using (var fs = File.Create(localFileName)) {
                        // 獲取結果,並轉成 stream 保存到本地。
                        var streamFromService = responseMessage.Content.ReadAsStreamAsync().Result;
                        streamFromService.CopyTo(fs);
                        return true;
                    }
                } else
                    return false;
            } catch {
                return false;
            }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM