国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

解析html和采集網頁的神兵利器

2019-11-17 01:46:32
字體:
來源:轉載
供稿:網友

解析html和采集網頁的神兵利器

HtmlAgilityPack是一個基于.Net的、第三方免費開源的微型類庫,主要用于在服務器端解析html文檔(在B/S結構的程序中客戶端可以用javascript解析html)。截止到本文發表時,HtmlAgilityPack的最新版本為1.4.0。下載地址:http://htmlagilitypack.codeplex.com/

下載后解壓縮后有3個文件,這里只需要將其中的HtmlAgilityPack.dll(程序集)、HtmlAgilityPack.xml(文檔,用于Visual Studio 2008中代碼智能提示和幫助說明之用)引入解決方案中即可使用,無需安裝任何東西,非常“綠色環保”。

在C#類文件開頭引入using HtmlAgilityPack;就可以使用該命名空間下的類型了。實際使用中,幾乎都是以HtmlDocument類為主線的,這一點非常類似于微軟.net framework中的XmlDocument類。XmlDocument類是操作的是xml文檔,而HtmlDocument類操作的是html文檔(其實也可以操作xml文檔),它們的操作方式都是基于Dom,所不同的是后者取消了諸如GetElementsByTagName這樣的方法,強化了GetElementById方法(在HtmlDocument中可以直接使用,而XmlDocument則不可以)。HtmlAgilityPack中定位節點基本上都用Xpath表達式,Xpath表達式的參考文檔可見:http://m.survivalescaperooms.com.cn/xpath/xpath_syntax.asp

例如,我們要采集博客園首頁推薦文章的標題,在asp.net中可以編寫如下代碼:

[csharp]view plaincopy
  1. HtmlWebhtmlWeb=newHtmlWeb();
  2. HtmlDocumenthtmlDoc=htmlWeb.Load(@"http://m.survivalescaperooms.com/");
  3. HtmlNodeCollectionanchors=htmlDoc.DocumentNode.SelectNodes(@"http://a[@class='titlelnk']");
  4. foreach(HtmlNodeanchorinanchors)
  5. Response.Write(anchor.InnerHtml+"<br/>");
  6. Response.End();

這段代碼將采集到的首頁html靜態文本解析成Dom節點樹,然后用Xpath表達式獲取整個文檔中class屬性值為titlelnk的所有a元素。獲取節點最常用節點對象的兩個方法:SelectNodes("xpath表達式")和SelectSingleNode("xpath表達式"),前者返回節點集合HtmlNodeCollection的一個實例;后者返回滿足條件的第一個節點,類型為HtmlNode的一個實例。后面的Foreach循環輸出每個a元素的內聯文本。

通常情況下,HtmlAgilityPack比正則表達式解析html更加高效準確,這體現在開發效率和運行性能兩方面。HtmlAgilityPack的靈活性也是非常好的。例如將上面代碼中的foreach循環體改成Response.Write(anchor.OuterHtml + "<br/>");則輸出的是超鏈接本身而非內聯文本。甚至可以修改超鏈接本身:

[csharp]view plaincopy
  1. foreach(HtmlNodeanchorinanchors)
  2. {
  3. anchor.Attributes.Add("style","color:red");
  4. Response.Write(anchor.OuterHtml+"<br/>");
  5. }

這樣運行后你看到的是紅色的超鏈接。你可以幾乎隨心所欲地對HtmlAgilityPack解析生成的Dom節點樹上的節點操作,就像你擁有一顆自己的圣誕樹,可以隨意對其修整剪裁。這也是正則方法無法相提并論的。HtmlAgilityPack對源文本的結構要求非常寬松,即使沒有根元素也一樣正常使用,這同要求非常嚴格的XmlDocument完全不同。熟練掌握HtmlAgilityPack解析html文檔的關鍵在于熟悉Xpath表達式語法,好在Xpath的語法入門比較簡單,只需花費數個小時基本就可滿足大部分應用。依托于Dom高效而通用的結構,Xpath強大而簡練的語法,HtmlAgilityPack真可以稱為“解析html和采集網頁的神兵利器”。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂尔多斯市| 汕尾市| 乐安县| 甘德县| 临沧市| 开阳县| 乳源| 横峰县| 万源市| 鹤山市| 施秉县| 通道| 凭祥市| 犍为县| 扶余县| 汾西县| 延长县| 静海县| 电白县| 林西县| 剑河县| 扎囊县| 西乌珠穆沁旗| 遂昌县| 玛纳斯县| 金寨县| 自贡市| 夏河县| 永和县| 视频| 松阳县| 南陵县| 荆州市| 凯里市| 将乐县| 金昌市| 读书| 昌图县| 建瓯市| 衡阳县| 百色市|