您的位置:首页 > Web前端 > HTML

Html解析器HtmlAgilityPack

2016-05-31 16:01 309 查看
HtmlAgilityPack 是一个灵活的Html解析器,支持LinQ,它可以让分析HTML就像分析XML一样简单,使用时首先要得到html,然后对节点进行操作即可.

HtmlAgilityPack开源地址

下载地址

常用的方法

HtmlDocument类代表html文档,例:

HtmlDocument doc=new HtmlDocument();

doc.Load("file.html")从文件加载html

doc.LoadHtml()从指定字符加载html

HtmlWeb类 从http获取HTML文档

HtmlWeb web=new HtmlWeb();

HtmlDocument doc=web.Load("http://www.kuiyu.net");

web.Get(url, path)//获取指定url的html文档并保存到指定路径

2.操作html中节点

HtmlDocument中DocumentNode属性是整个Html文档的根节点,本身是HtmlNode

HtmlNode的SelectNodes()方法返回多个HtmlNode的集合对象HtmlNodeCollection

HtmlNode的SelectSingleNode()返回单个HtmlNode

3.实例

3.1加载一个html文档,并修改文档内容

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using HtmlAgilityPack;

namespace HtmlAgility

{

class Program

{

static void Main(string[] args)

{

HtmlDocument doc = new HtmlDocument();

doc.Load("file.htm");

//遍历所有a标签

foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))

{

HtmlAttribute att = link.Attributes["href"];

att.Value = "http://www.kuiyu.net";

}

doc.Save("file.htm");

}

}

}

3.2加载一个url

HtmlWeb hw = new HtmlWeb();

HtmlDocument doc = hw.Load("http://www.kuiyu.net");

//遍历所有a标签

foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))

{

HtmlAttribute att = link.Attributes["href"];

Response.Write(att.Value);

}

3.3节点操作

<ul class="tab">

<li class="on"><a href="http://www.baidu.com">百度</a></li>

<li><a href="http://www.sina.com.cn" >新浪</a></li>

<li><a href="http://v.bitauto.com">网易</a></li>

<li><a href="http://www.360.cn">360</a></li>

</ul>

得到上面代码中链接名称

//得到使用class="tab"的ul

var nodes = doc.DocumentNode.SelectNodes("//ul[@class='tab']");

if (nodes != null)

//遍历ul下顶级子节点

foreach (HtmlNode node in nodes.Nodes())

{ //找出li中的a标签

var a = node.SelectSingleNode("a");

//li中最后一个a标签

//var a=node.SelectSingleNode("./a[last()]");

if(a!=null)

tt += a.InnerText;

}

如果页面是JS生成的代码,可以直接复制生成的代码字符,或用webbrowser获取

关键参考XPath的语法

可以使用火狐firebug插件或谷歌浏览器,查看html 右击元素选择"复制XPath"可以快速得到元素位置

xpath实例

//*[@class='root'] 表示所有使用class='root'的节点

./a 表示当前节点下所有a节点

./ul[@class='tree-item-box']/li 当前节点下ul使用class='tree-item-box'下的li

./a/big 当前节点下a下的big元素
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: