Html解析器HtmlAgilityPack

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文档,并修改文档内容

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using HtmlAgilityPack;
  6. namespace HtmlAgility
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. HtmlDocument doc = new HtmlDocument();
  13. doc.Load("file.htm");
  14. //遍历所有a标签
  15. foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
  16. {
  17. HtmlAttribute att = link.Attributes["href"];
  18. att.Value = "http://www.kuiyu.net";
  19. }
  20. doc.Save("file.htm");
  21. }
  22. }
  23. }

3.2加载一个url

  1. HtmlWeb hw = new HtmlWeb();
  2. HtmlDocument doc = hw.Load("http://www.kuiyu.net");
  3. //遍历所有a标签
  4. foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
  5. {
  6. HtmlAttribute att = link.Attributes["href"];
  7. Response.Write(att.Value);
  8. }

3.3节点操作

  1. <ul class="tab">
  2. <li class="on"><a href="http://www.baidu.com">百度</a></li>
  3. <li><a href="http://www.sina.com.cn" >新浪</a></li>
  4. <li><a href="http://v.bitauto.com">网易</a></li>
  5. <li><a href="http://www.360.cn">360</a></li>
  6. </ul>

得到上面代码中链接名称

  1. //得到使用class="tab"的ul
  2. var nodes = doc.DocumentNode.SelectNodes("//ul[@class='tab']");
  3. if (nodes != null)
  4. //遍历ul下顶级子节点
  5. foreach (HtmlNode node in nodes.Nodes())
  6. { //找出li中的a标签
  7. var a = node.SelectSingleNode("a");
  8. //li中最后一个a标签
  9. //var a=node.SelectSingleNode("./a[last()]");
  10. if(a!=null)
  11. tt += a.InnerText;
  12. }

如果页面是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元素

转载于:https://www.cnblogs.com/gourd/p/5546169.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值