HtmlAgilityPack

使用HtmlAgilityPack可以以面向对象的方式通过查找Html节点来获取页面元素。参考:http://html-agility-pack.net

HtmlDocument类

//方法
LoadHtml(string content);
//加载Html数据 CreateNode(string html)
//创建一个HtmlNode CreateAttribute(string attriName, string attriVal)
//创建一个属性 CreateTextNode(string text)
//创建文本 //其它参考:http://html-agility-pack.net/utilities和http://html-agility-pack.net/writer //属性
DocumentNode
//得到根节点,返回一个HtmlNode
HtmlNode类
//方法
SelectNodes(string xPath)
//获取xPath指定的节点集合 SelectSingleNode(string xPath)
//获取xPath指定的节点集合中的第一个节点 SetAttributeValue(HtmlAttribute attri | string attriName, string attriVal)
//修改当前节点的属性 PrependChild(HtmlNode node)
//在当前节点中的开始处插入新的子节点 AppendChild(HtmlNode node)
//在当前节点中的末尾处插入新的子节点 PrependChildren(HtmlNode node)
//在当前节点中的开始处的子节点的开始处插入后代节点 AppendChildren(HtmlNode node)
//在当前节点中的末尾处的子节点的末尾处插入后代节点 InsertAfter(HtmlNode node)
//在当前节点后面插入新节点,类似的有insertBefore Remove()
//移除自身 RemoveAll()
//移除自身包含的所有节点 RemoveAllChildren()
//移除自身包含的所有节点 RemoveChild(HtmlNode oldChild | HtmlNode oldChild, bool keepGrandChildren)
//keepGrandChildren:是否深度移除后代节点
//移除自身包含的由参数指定的节点 ReplaceChild(HtmlNode newChild, HtmlNode oldChild);
//在当前节点中,用newChild替换oldChild Clone()
//创建副本 CloneNode(bool deep | string name | string name, bool deep)
//deep:是否深度克隆,如果是false,则只克隆节点自身
//name:克隆的同时修改节点的标签名称,比如克隆H1的内容同时改掉结果节点的名称为H2 CopyFrom(HtmlNode node | HtmlNode node, bool deep)
//deep:是否深度拷贝,如果是false,则只拷贝节点自身
//从参数指定的节点处复制其包含的所有节点 Element()
//在当前节点中根据参数指定的名称获取一个子节点,返回单个HtmlNode Elements()
//在当前节点中根据参数指定的名称获取子节点集合,返回IEnumerable<HtmlNode>集合 Ancestors(string name)
//获取当前节点的由参数指定的名称的祖先节点,如果参数为空则获取当前节点的所有祖先节点的集合,类似的有AncestorsAndSelf()、AncestorsAndSelf(string name) Descendants(string name)
//获取当前节点的由参数指定的名称的后代节点,如果参数为空则获取当前节点的所有后代节点的集合,类似的有DescendantsAndSelf()、DescendantsAndSelf(string name) DescendantNodes()
//获取所有后代节点,类似的有DescendantNodesAndSelf() //属性
InnerHtml
//设置或获取当前节点所包含的元素节点 InnerText
//设置或获取当前节点所包含的文本 OuterHtml
//获取当前节点所包含的所有代码 ParentNode
//获取当前节点的父节点 ChildNodes
//获取所有子节点,类似的有FirstChild、LastChild、NextSibling、ParentNode

HtmlAttribute类

//方法
Add(HtmlAttribute attri | string attriName, string attriVal)
//添加一个属性,类似的有Append() Remove(string attriName)
//此方法需要属性集合调用,移除节点的由参数指定的属性,如果参数为空则移除所有属性,类似的有RemoveAll()、RemoveAt(int index)

例子:

private void Test()
{
    HtmlDocument doc = new HtmlDocument();
    //三种方式创建Html对象     //第一种:
    //System.IO.StreamReader reader = System.IO.File.OpenText(url);
    //doc.LoadHtml(reader);     //第二种:
    //doc.LoadHtml(url); 如果使用Load(url)会出现提示文档包含非法字符     //第三种:
    //string htmlText = "<div>xxx</div>";
    //doc.LoadHtml(htmlText);
           
    string url = "http://www.weather.com.cn/weathern/101040100.shtml";
    WebClient wc = new WebClient();
    wc.Encoding = Encoding.GetEncoding("utf-8");
    string content = wc.DownloadString(url);     doc.LoadHtml(content);
    HtmlNode root = doc.DocumentNode; //得到根节点
    var div= root.SelectNodes("//div").Where(d => d.InnerText.Contains("sam")).SingleOrDefault();
}

附:移除注释

foreach (var comment in doc.DocumentNode.SelectNodes("//comment()").ToArray())
{
    comment.Remove();//新增的代码
}

ASP.NET MVC - 处理Html数据的更多相关文章

  1. ASP.NET MVC 5 - 将数据从控制器传递给视图

    在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图.控制器类将响应请求来的URL.控制器类是给您写代码来处理传入请求的地方,并从数据库中检索数据,并最终决定什么类型的返回结果 ...

  2. 【ASP.NET MVC系列】数据验证和注解

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

  3. [转]ASP.NET MVC 5 - 将数据从控制器传递给视图

    在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图.控制器类将响应请求来的URL.控制器类是给您写代码来处理传入请求的地方,并从数据库中检索数据,并最终决定什么类型的返回结果 ...

  4. ASP.Net MVC中数据库数据导出Excel,供HTTP下载(转)

    转自http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于web ...

  5. asp.net mvc常用的数据注解和验证以及entity framework数据映射

    终于有时间整理一下asp.net mvc 和 entity framework 方面的素材了. 闲话少说,步入正题: 下面是model层的管理员信息表,也是大伙比较常用到的,看看下面的代码大伙应该不会 ...

  6. ArcGIS Server 10.2 实战(一)Asp.net MVC与JSON数据妙用实现动态生成要素图层

    今年7月刚刚发布的ArcGIS 10.2为GIS的web开发带来了一个很实在的功能,JSON转要素.以往GIS图层外部数据(如文本数据,数据库数据)动态地写入地图服务中的图层是一件不可想象的事情,如今 ...

  7. ASP.Net MVC中数据库数据导出Excel,供HTTP下载

    本文来自:http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于 ...

  8. ASP.NET MVC 模型和数据对象映射实践

    在使用 MVC 开发项目的过程中遇到了个问题,就是模型和数据实体之间的如何快捷的转换?是不是可以像 Entity Framework 的那样 EntityTypeConfiguration,或者只需要 ...

  9. ASP.NET MVC 异步Excel数据选择导出

    以前习惯用一些框架来实现Excel文件数据导出,工作中也经常用到:比如extJs.easyUI.angularJs等,最近在做mvc程序的时候要实现该功能,相信这种功能在我们实际工作中是很常见,尤其是 ...

  10. 使用Newtonsoft.json 解决 Asp.Net MVC DateTime类型数据Json格式化问题

    解决思路 众所周知,MVC中调用的微软的组件JavaScriptSerialer...,格式DateTime类型数据需要在客户端专门解. 还知道,NewtonSoft.json可以“正确”的格式化Da ...

随机推荐

  1. 让mysql监听ipv4

    系统:centos7 关闭ipv6方法: 方法1:编辑/etc/sysctl.conf文件,添加如下两行到文件 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6. ...

  2. Linux 查看进程的线程数

    三种方法: 1. 使用top命令,具体用法是 top -H 加上这个选项,top的每一行就不是显示一个进程,而是一个线程. 2. 使用ps命令,具体用法是 ps -xH 这样可以查看所有存在的线程,也 ...

  3. 正则表达式(_ % regexp_like)

    '[^\.0-9]'——不含小数点和数字的字符串,^在中括号内表非 select '123' aa from dual where regexp_like( '123', '[^\.0-9]' ) - ...

  4. ubuntu下cmake编译opencv 3.4.3源码;

    在进行编译前,准备工作: 1)  到opencv官网下载源码(https://opencv.org/releases.html): 2)  安装qt(http://download.qt.io/); ...

  5. python自动化开发-[第十三天]-javascript

    今日概要 1.javascript简单语法 1.javascript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名S ...

  6. 9、字符串转数字用int、因为input里面接受的全部是字符串

    #!/user/bin/python# -*- coding:utf-8 -*-num = int(input('请输入数字:'))if num == 1: print(666)elif num == ...

  7. collections 模块之Counter

    Counter字典的子类,用于统计哈希对象 from collections import Counter users = ["body1","body11", ...

  8. Linux下查看某个进程打开的文件数-losf工具常用参数介绍

    Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...

  9. python while 格式化 运算符 编码

    #######################总结############# 1. 循环 while 条件: 循环体(break, continue) 循环的执行过程: 执行到while的时候. 首先 ...

  10. 原生JavaScript运动功能系列(五):定时定点运动

    原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现 原生JavaScript运动功能系列(二):缓冲运动 原生JavaScript运动功能系列(三):多物体多值运动 原生JavaS ...