使用Html Agility Pack快速實現解析Html(C#)

傳統解析html標籤的方式是利用HttpWebRequest獲取html字符串,然後通過正則表達式進行解析,但是這種方式比較麻煩。有沒有更簡單的方式呢?有,那就是Html Agility Pack,它可以做到像用XmlDocument類來解析xml一樣輕鬆、方便,並且是開源的

其源代碼可以通過github下載,下載地址爲:https://github.com/zzzprojects/html-agility-pack

其官網地址爲:https://html-agility-pack.net/

其實Html Agility Pack的類不是很多,我們解析Html的時候,用到的也就HtmlDocument和HtmlNode(還有HtmlNodeCollection集合類)這幾個類。官網也有相對應的API文檔說明,其實真的是簡單易懂,傳送門:API文檔

 

教程:https://www.cnblogs.com/xuliangxing/p/8004403.html

/*
    c# HtmlAgilityPack
    --------------------------------
 * 關於節點的重要屬性:
    Attributes             獲取節點的屬性集合
    ChildNodes            獲取子節點集合(包括文本節點)
    HasAttributes           判斷該節點是否含有屬性
    HasChildNodes           判斷該節點是否含有子節點
    HasClosingAttributes        判斷該節點的關閉標籤是否含有屬性(</xxx class="xxx">)
    Line               獲取該節點的開始標籤或開始代碼位於整個HTML源代碼的第幾行(行號)
    Name                Html元素名
    Id                獲取該節點的Id屬性
    NextSibling            獲取下一個兄弟節點
    PreviousSibling          獲取前一個兄弟節點
    NodeType              獲取該節點的節點類型(四個:Text,Element,Document,Comment)
    OwnerDocument            節點所在的HtmlDocument文檔
    ParentNode            獲取該節點的父節點
    XPath               根據節點返回該節點的XPath
 * 關於節點的重要方法:
    Elements(string name);       根據參數名獲取匹配的元素集合
    Element(string name);       根據參數名獲取一個元素
    DescendantNodes();         獲取所有子代節點,如果有參數,注意元素名要與參數匹配
    DescendantNodesAndSelf();     獲取所有的子代節點以及自身,如果有參數,注意元素名要與參數匹配
    --------------------------------
    Document.GetElementbyId("box").InnerText;
 
    //枚舉元素兩種寫法
    string s = "";
    HtmlNodeCollection nodes = Document.DocumentNode.SelectNodes("//li");
    foreach (HtmlNode li in nodes)
    {
        s+=li.InnerText+" ";
    }
    --------------------------------
    foreach (HtmlNode li in Document.DocumentNode.Descendants("li"))
    {
        s+=li.InnerText+" ";
    }
    --------------------------------
    string s = node.Attributes["src"].Value;
    string s = node.Attributes["href"].Value;
    string s = node.Attributes["title"].Value;
    --------------------------------
    //獲取所有板塊的a標籤
    HtmlAgilityPack.HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//a");
    --------------------------------
    //獲取所有a標籤的鏈接
    foreach (HtmlNode a in Document.DocumentNode.Descendants("a"))
    {
        s+=a.Attributes["href"].Value+" ";
    }
    或者
    foreach (HtmlNode a in Document.DocumentNode.SelectNodes("//a"))
    {
        s+=a.Attributes["href"].Value+" ";
    }
    --------------------------------
    //獲取標題,SelectSingleNode用於獲取滿足條件的唯一的節點。
    Document.DocumentNode.SelectSingleNode("//title").InnerText;
    --------------------------------
    //獲取name爲selected的li,也就是相當於getElementsByName():
    HtmlNode node = Document.DocumentNode.SelectSingleNode("//li[@name='selected']");
    s=node.InnerText;
    或者
    Document.DocumentNode.SelectSingleNode("//li[@name='selected']").InnerText;
    --------------------------------
    每一個Htmlnode,你要獲取他的數據用這個方法:  node.Attributes["src"].Value
    --------------------------------
    xpath包含7個類型:元素(Element),屬性(Attribute),文本(Test),命名空間,處理指令,註釋,文檔根節點。
    下面列出了最有用的路徑(也就是遇到的參數叫:XPath)表達式:
    nodename    選取此節點的所有子節點。 
    /           從根節點選取。 
    //          從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。 
    .           選取當前節點。 
    ..          選取當前節點的父節點。
    @           選取屬性。
 * 注意:
    “//”:從當前選擇的節點開始尋找,對於後面的表達式是在當前節點中的任意位置尋找,只要符合的就加入到選擇結果中。
    “./”:也是從當前選擇的節點開始選擇,但是僅僅是尋找當前節點的直系子元素,而對於孫子及以後的節點都不考慮。
    --------------------------------
    /div/li[1]:選取屬於div子元素的第一個li元素。 
    /div/li[last()]:選取屬於div子元素的最後一個li元素。 
    /div/li[last()-1]:選取屬於div子元素的倒數第二個li元素。 
    /div/li[position()<3]:選取最前面的兩個屬於 div 元素的子元素的li元素。 
    //title[@lang]:選取所有擁有名爲lang的屬性的title元素。 
    //div[@id='box']:選取所有div元素,且這些元素擁有值爲box的id屬性。
    /div/li[Order>2]:選取div元素的所有li元素,且其中的Order元素的值須大於2。 
    /div/li[Order<3]/Title:選取div元素中的li元素的所有Title元素,且其中的Order元素的值須小於3。
    --------------------------------
 */

https://www.cnblogs.com/dy470208739/p/8491453.html
--------------------- 
作者:zxy2847225301 
來源:CSDN 
原文:https://blog.csdn.net/zxy13826134783/article/details/85229796 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章