Net C#解析HTML - HtmlAgilityPack.dll

Why Html Agility Pack? (以下简称HAP)

.Net下解析HTML文件有很多种选择,包括微软自己也提供MSHTML用于manipulate HTML文件。但是,经过我一段时间的搜索,Html Agility Pack浮出水面:它是Stackoverflow网站上推荐最多的C# HTML解析器。HAP开源,易用,解析速度快。.

How to use HAP?

1. 右击项目,选择"Manage NuGet Packages"

2. 搜索HTMLAgilityPack

3. 在Visual Studio Solution里,右击project -> add reference -> 选择解压文件夹里的HTMLAgilityPack.dll -> 确定

4. 代码头部加入 using HtmlAgilityPack;

Quick Start:

HtmlWeb webClient = new HtmlWeb();
HtmlDocument doc = webClient.Load("http://xxx");
HtmlNodeCollection hrefList = doc.DocumentNode.SelectNodes(".//a[@href]");
if (hrefList != null)
{
     foreach (HtmlNode href in hrefList)
     {
        HtmlAttribute att = href.Attributes["href"];
        doSomething(att.Value);
     }
}

以上代码示例load进来一个网页,提取所有的link(就是<a href=...></a>),遍历时提取出link的内容(href.Attributes["href"].Value)然后doSomething().

简介

本文介绍net处理html页面元素的工具类(HtmlAgilityPack.dll)的使用,用途比较多的应该是例如采集类的功能,采集到的html字符串要怎样处理是一个头痛的问题,如果是截取就太麻烦了而且容易出错。所有就用到本文的第三方dll来处理了。

下载

右击项目,选择"Manage NuGet Packages"

搜索:HtmlAgilityPack,之后安装就行了

使用

1.添加HtmlAgilityPack.dll引用(引用类using HtmlAgilityPack;)。

2.简单根据html中input的id获取value代码如下:

// 模拟用户请求
WebClient webClient = new WebClient();
webClient.Encoding = System.Text.Encoding.UTF8;
string htmlContext = webClient.DownloadString("http://stone_w.cnblogs.com/");
webClient.Credentials = CredentialCache.DefaultCredentials; // 添加授权证书
webClient.Headers.Add("User-Agent", "Microsoft Internet Explorer");
webClient.Headers.Add("Host", "www.cnblogs.com");

// 获取html元素(htmlContext为html页面字符串)
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmlContext);  // 加载html页面
HtmlNode navNode = htmlDoc.GetElementbyId("id名称");
Response.Write(navNode.Attributes["value"].Value);

总结

HtmlAgilityPack可以根据id查询value,还可以获取单个元素节点,都是HtmlDocument类的内置方法,大家可以试着练练。