HTML解析HtmlAgility學習


HtmlAgility是一個開源的Html解析庫,據說是C#版的JQuery,功能非常強大。

該篇學習它的解析功能,還可以模擬用戶請求,創建html,設置代理等等,暫先不研究。

 

 

----------------------------------------------------------------------------

1.簡單例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

using HtmlAgilityPack;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            HtmlWeb webClient = new HtmlWeb();
            HtmlDocument doc = webClient.Load("http://www.baidu.com");
            var rootNode = doc.DocumentNode;
            HtmlNodeCollection categoryNodeList = rootNode.SelectNodes("//html[1]/body[1]");
            foreach (var item in categoryNodeList)
            {
                Console.WriteLine("item: " + item.Name);
            }

            Console.Read();
        }
    }
}

算是第一個Hellow world,扒的百度頁面。

----------------------------------------------------------------------------

2.讀取

那么,如果是載入本地的Html或者直接讀流,字符串。可以這么做

HtmlDocument doc = new HtmlDocument();
doc.Load(@"D:\xxx.mht", Encoding.UTF8, false);

 

public void LoadHtml(string html);//直接讀字符串化的html
public void Load(Stream stream);//
public void Load(string path);//本地路徑

 

HtmlDocumen其本身也提供檢測編碼的方法。

HtmlWeb主要是自動檢測編碼,如果要自定義編碼可以改其中屬性。OverrideEncoding, AutoDetectEncoding。而HtmlDocument對編碼的操作反而不一樣,指定在參數中,估計是自動檢測編碼已經很強大了把,很少要自己指定。。。。

 

----------------------------------------------------------------------------

3.節點選擇

rootNode.SelectNodes
rootNode.SelectSingleNode

選擇節點和選擇單個節點。

用SelectNodes為例,看一下參數

rootNode.SelectNodes("//html[1]/body[1]");

"//"雙斜杠表示從根節點查找所有子節點

"/"單斜杠表示只查找第一層子節點

"./"點斜杠表示從當前節點開始查找

 

[]中括號中的代表相同名字的子節點索引。

var resultList = rootNode.SelectNodes("//html[1]/body[1]/div[1]/div[position()<5]");//取前4個元素
resultList = rootNode.SelectNodes("//html[1]/body[1]/div[1]/div[last()]");//取最后1個元素
resultList = rootNode.SelectNodes("//html[1]/body[1]/div[1]/div[@id]");//取所有有id屬性的元素
resultList = rootNode.SelectNodes("//html[1]/body[1]/div[1]/div[@id='head']");//取屬性id值為head的元素

更多屬性可以在W3SCHOOL查看http://www.w3school.com.cn/xpath/xpath_functions.asp

 

 取屬性

doc.Attributes["id"];

 取元素

doc.GetElementbyId("id");

 

 


免責聲明!

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



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