.net下功能強大的HTML解析庫HtmlAgilityPack,數(shù)據(jù)抓取必備
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
HtmlAgilityPack是一個.NET平臺下的HTML解析庫,它可以將HTML文本轉(zhuǎn)換為DOM文檔對象,方便我們對HTML文本進行操作和分析。HtmlAgilityPack支持XPath語法,可以通過XPath表達式來獲取DOM節(jié)點,同時還提供了一些方便的API,可以實現(xiàn)HTML文本的解析、修改、生成等功能。本文將詳細介紹HtmlAgilityPack的使用及使用方法。 一、HtmlAgilityPack的安裝 HtmlAgilityPack是一個NuGet包,可以通過Visual Studio的NuGet包管理器來安裝。具體步驟如下:
安裝完成后,就可以在項目中使用HtmlAgilityPack了。 二、HtmlAgilityPack的使用
使用HtmlAgilityPack解析HTML文本的第一步是將HTML文本加載到一個HtmlDocument對象中??梢酝ㄟ^以下代碼來實現(xiàn): HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(htmlText); 其中,htmlText是要解析的HTML文本。LoadHtml方法會將HTML文本解析成一個DOM文檔對象,并存儲在doc對象中。
HtmlAgilityPack提供了一些方法來獲取DOM節(jié)點,例如GetElementById、GetElementsByTagName、selectSingleNode、selectNodes等。這些方法都接受一個XPath表達式作為參數(shù),用來指定要獲取的節(jié)點。以下是一些示例代碼: // 獲取id為"content"的節(jié)點 HtmlNode contentNode = doc.GetElementById("content"); // 獲取所有的a標(biāo)簽 HtmlNodeCollection aNodes = doc.DocumentNode.selectNodes("//a"); // 獲取第一個p標(biāo)簽 HtmlNode pNode = doc.DocumentNode.selectSingleNode("//p"); 其中,XPath表達式的語法與XML的XPath語法相同。在這里不再詳細介紹。
HtmlAgilityPack提供了一些方法來修改DOM節(jié)點,例如SetAttributeValue、InnerHtml、OuterHtml等。以下是一些示例代碼: // 修改id為"content"的節(jié)點的class屬性 contentNode.SetAttributeValue("class", "new-class"); // 修改第一個p標(biāo)簽的內(nèi)容 pNode.InnerHtml = "這是新的內(nèi)容"; // 修改第一個a標(biāo)簽的href屬性 HtmlNode aNode = aNodes[0]; aNode.SetAttributeValue("href", "http://www.example.com");
HtmlAgilityPack還可以將DOM文檔對象轉(zhuǎn)換為HTML文本??梢酝ㄟ^以下代碼來實現(xiàn): string newHtmlText = doc.DocumentNode.OuterHtml; 其中,OuterHtml屬性返回DOM文檔對象的HTML文本表示。 三、HtmlAgilityPack的功能實例 下面將通過一些具體的實例來演示HtmlAgilityPack的使用方法。
以下代碼演示了如何獲取頁面標(biāo)題: HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(htmlText); HtmlNode titleNode = doc.DocumentNode.selectSingleNode("//title"); string title = titleNode.InnerHtml; 其中,htmlText是要解析的HTML文本。首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達式“//title”獲取頁面標(biāo)題節(jié)點。最后,通過InnerHtml屬性獲取標(biāo)題的內(nèi)容。
以下代碼演示了如何獲取頁面中的所有圖片: HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(htmlText); HtmlNodeCollection imgNodes = doc.DocumentNode.selectNodes("//img"); foreach (HtmlNode imgNode in imgNodes) { string src = imgNode.GetAttributeValue("src", ""); Console.WriteLine(src); } 首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達式“//img”獲取所有圖片節(jié)點。最后,遍歷所有圖片節(jié)點,獲取每個節(jié)點的src屬性。
以下代碼演示了如何獲取頁面中的所有鏈接: HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(htmlText); HtmlNodeCollection aNodes = doc.DocumentNode.selectNodes("//a"); foreach (HtmlNode aNode in aNodes) { string href = aNode.GetAttributeValue("href", ""); Console.WriteLine(href); } 首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達式“//a”獲取所有鏈接節(jié)點。最后,遍歷所有鏈接節(jié)點,獲取每個節(jié)點的href屬性。
以下代碼演示了如何將頁面中的所有鏈接修改為指定的鏈接: HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(htmlText); HtmlNodeCollection aNodes = doc.DocumentNode.selectNodes("//a"); foreach (HtmlNode aNode in aNodes) { aNode.SetAttributeValue("href", "http://www.example.com"); } string newHtmlText = doc.DocumentNode.OuterHtml; 首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達式“//a”獲取所有鏈接節(jié)點。最后,遍歷所有鏈接節(jié)點,將它們的href屬性修改為指定的鏈接。最后,通過OuterHtml屬性將修改后的DOM文檔對象轉(zhuǎn)換為HTML文本。 本文介紹了HtmlAgilityPack的使用及使用方法。HtmlAgilityPack是一個功能強大、易用性高的HTML解析庫,可以方便地對HTML文本進行操作和分析。通過本文的介紹,讀者可以了解HtmlAgilityPack的基本用法,并可以根據(jù)需要自行擴展。 作者:架構(gòu)師老盧 來源:https://www.cnblogs.com/hanbing81868164/p/17856515.html 該文章在 2023/11/29 9:27:37 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |