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元素
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元素
相关文章推荐
- .net mvc 页面(静态页面)播放 .264格式视频文件
- html页面3秒后自动跳转的方法有哪些
- HTML页面每次打开的时候都清除页面缓存
- HTML 5 <input> placeholder 属性
- 如何将一段字符串转换为HTML格式
- 常用HTML正则
- DHtmlx Gantt - forestme的日志 - 网易博客
- HTML:设置背景颜色和图片
- html特殊字符编码问题导致的细节问题
- 【整理】html知识点
- 判断某一区域是否为空
- html浏览器选择执行判断浏览器种类
- 自定义HTML标签属性
- html,XPath 学习笔记
- html----02----html基础
- html基础
- html里面的标签可以随意嵌套吗??
- Html学习(9) - 表单格式化
- Html学习(8) - 表单组件:input和select
- Html学习(7) - 画中画