HTML解析利器HtmlAgilityPack

2022-02-28 17:36:16 字數 2695 閱讀 5380

乙個.net下的html解析類庫htmlagilitypack。htmlagilitypack是乙個支援用xpath來解析html的類庫,在花了一點時間學習了解htmlagilitypack的api和xpath之後,周公就做了乙個簡單的工具完成了這個功能,

htmlagilitypack是乙個開源的.net類庫,它的主頁是

xpath簡明介紹

xpath 使用路徑表示式來選取 xml 文件中的節點或節點集。節點是通過沿著路徑 (path) 或者步 (steps) 來選取的。

下面列出了最有用的路徑表示式:

nodename:選取此節點的所有子節點。 

/:從根節點擊取。 

//:從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置。 

.:選取當前節點。 

..:選取當前節點的父節點。

例如有下面一段xml:

<?xml version="

1.0" encoding="

utf-8

"?>

在asp.net中使用highcharts js圖表

">log4net使用詳解(續)

">2023年11月23日

j2me開發的一般步驟

">2023年06月12日 "

eng">powerdesign高階應用

"zh-cn

">2007-09-08

1、獲取網頁title:doc.documentnode.selectsinglenode("//title").innertext;

解釋:xpath中「//title」表示所有title節點。selectsinglenode用於獲取滿足條件的唯一的節點。

3、獲取name為kw的input,也就是相當於getelementsbyname(): var kwbox = doc.documentnode.selectsinglenode("//input[@name='kw']");

解釋:"//input[@name='kw']"也是xpath的語法,表示:name屬性等於kw的input標籤。

針對上面的xml檔案,我們列出了帶有謂語的一些路徑表示式,以及表示式的結果:

/articles/article[1]:選取屬於articles子元素的第乙個article元素。 

/articles/article[last()]:選取屬於articles子元素的最後乙個article元素。 

/articles/article[last()-1]:選取屬於articles子元素的倒數第二個article元素。 

/articles/article[position()<3]:選取最前面的兩個屬於 bookstore 元素的子元素的article元素。 

//title[@lang]:選取所有擁有名為lang的屬性的title元素。 

//createat[@type='zh-cn']:選取所有createat元素,且這些元素擁有值為zh-cn的type屬性。 

/articles/article[order>2]:選取articles元素的所有article元素,且其中的order元素的值須大於2。 

/articles/article[order<3]/title:選取articles元素中的article元素的所有title元素,且其中的order元素的值須小於3。

htmlagilitypack api簡明介紹

在htmlagilitypack中常用到的類有htmldocument、htmlnodecollection、

htmlnode和htmlweb等。

其流程一般是先獲取html,這個可以通過htmldocument的load()或loadhtml()來載入靜態內容,或者也可以htmlweb的get()或load()方法來載入網路上的url對應的html。

得到了htmldocument的例項之後,就可以用htmldocument的documentnode屬性,這是整個html文件的根節點,它本身也是乙個htmlnode,然後就可以利用htmlnode的selectnodes()方法返回多個htmlnode的集合物件htmlnodecollection,也可以利用htmlnode的selectsinglenode()方法返回單個htmlnode。

htmlagilitypack實戰

下面是乙個解析csdn部落格的**例項:

private

void button1_click(object

sender, eventargs e)

htmlagilitypack確實有中文亂碼問題,需要在呼叫之前設定overrideencoding的值。

//

自動獲取網頁編碼

private

static encoding getwebencoding(string

serverurl)

");return

getencoding(encodname);

}

HTML解析利器HtmlAgilityPack

xmlversion 1.0 encoding utf 8 articles article title 在asp.net中使用highcharts js圖表 title url url createat type en 2011 04 07 price article article title ...

HTML解析利器HtmlAgilityPack

xmlversion 1.0 encoding utf 8 articles article title 在asp.net中使用highcharts js圖表 title url url createat type en 2011 04 07 price article article title ...

HTML解析利器HtmlAgilityPack

xmlversion 1.0 encoding utf 8 articles article title 在asp.net中使用highcharts js圖表 title url url createat type en 2011 04 07 price article article title ...