最近學習.NET Core ,想把自己之前的一個項目升級到 .NET Core。
發現HtmlAgilityPack 沒法進行引用,遂自己做了些修改,可以運行在 .NET Core 中。現在分享出來,也是為 .NET Core 做一些貢獻。
.NET Core版 HtmlAgilityPack HTML解析利器,目前是 HtmlAgilityPack Core RC2
HtmlAgilityPack 介紹
HtmlAgilityPack是一個基於.Net的、第三方免費開源的微型類庫,主要用於在服務器端解析html文檔。
本源碼fork 自官網源碼,我只是對其做了一些修改及封裝。
官網源碼: http://htmlagilitypack.codeplex.com/
GitHub: https://github.com/linezero/HtmlAgilityPack
HtmlAgilityPack中定位節點基本上都用Xpath表達式,Xpath表達式的參考文檔可見:http://www.w3school.com.cn/xpath/xpath_syntax.asp 。
下面是幾個簡單使用說明:
1、獲取網頁title:doc.DocumentNode.SelectSingleNode("//title").InnerText;
解釋:XPath中“//title”表示所有title節點。SelectSingleNode用於獲取滿足條件的唯一的節點。
2、獲取所有的超鏈接:doc.DocumentNode.Descendants("a")
3、獲取name為kw的input,也就是相當於getElementsByName():
var kwBox = doc.DocumentNode.SelectSingleNode("//input[@name='kw']");
.NET Core 使用HtmlAgilityPack
新建一個控制台應用程序
然后添加 HtmlAgilityPack 引用,這里直接添加項目引用。
下面來講解一下簡單使用。以博客園新聞區為示例,進行解析。
public static void Main(string[] args) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); HtmlWeb web = new HtmlWeb(); var doc = web.LoadFromWebAsync("http://news.cnblogs.com/").Result; var nodes = doc.DocumentNode.SelectNodes("//div[@id='news_list']/div/div[2]/h2/a"); foreach (var item in nodes) { Console.WriteLine($"標題:{item.InnerText} 地址:{item.Attributes["href"].Value}" ); } Console.ReadKey(); }
這樣我們就成功獲取到博客園新聞區信息。更多更強大的功能大家可以自己去發掘。
HtmlAgilityPack .NET Core RC2
GitHub: https://github.com/linezero/HtmlAgilityPack
如果你覺得本文對你有幫助,請點擊“推薦”,謝謝。