曾经,我傻乎乎的用正则表达式成功的解析了学校的新闻网、教务管理系统、图书馆管理系统中我想要的所有的内容。那时候废了好大的劲写那正则啊,而且最后还是各种不给力,经常会有意想不到的bug出现,最后经过无数次修复才基本可以正常使用。但是还是很不爽的。后来看见别人用这个东西解析HTML,就感觉很强大,今天自己动手尝试了一下,当时几天的代码,用这个类库几分钟就搞定了。废话不多说,进入主题。

Html Agility Pack主页:http://htmlagilitypack.codeplex.com/

作者主页:http://zhoufoxcn.blog.51cto.com/792419/595344/

使用类库第一步:引用类库;

第二步:加载HTML文件:支持本地文件,也可以利用类库提供的document.LoadHtml()方法来加载远程的资源

第三步:获得根节点:

HtmlNode rootNode = document.DocumentNode;

第三步:在根节点下面要找你找的内容,这个我没有全部做尝试,下面是我做的一些测试代码,解析的是网易的新闻页;

 HtmlDocument document=new HtmlDocument();
document.Load(@"E:\c.htm", Encoding.Default);
HtmlNode rootNode = document.DocumentNode;
HtmlNode titleNode = rootNode.SelectSingleNode("//h1[@id='h1title']");
Console.WriteLine("-------------------------标题-------------------------------");
Console.WriteLine(titleNode.InnerHtml);
Console.WriteLine("-------------------------时间-------------------------------");
HtmlNode timeNode = rootNode.SelectSingleNode("//div[@class='ep-info cDGray']/div[@class='left']");
Console.WriteLine(timeNode.InnerHtml);
Console.WriteLine("-------------------------正文-------------------------------");
HtmlNode newsNode = rootNode.SelectSingleNode("//div[@class='end-text']");
Console.WriteLine(newsNode.InnerHtml);
Console.ReadKey();

官方的文档告诉我们,可以使用如下的方法来获得根节点下面的一个或者多个子节点:

/Articles/Article[1]:选取属于Articles子元素的第一个Article元素。 
 /Articles/Article[last()]:选取属于Articles子元素的最后一个Article元素。 
 /Articles/Article[last()-1]:选取属于Articles子元素的倒数第二个Article元素。 
 /Articles/Article[position()<3]:选取最前面的两个属于 bookstore 元素的子元素的Article元素。 
 //title[@lang]:选取所有拥有名为lang的属性的title元素。 
 //CreateAt[@type='zh-cn']:选取所有CreateAt元素,且这些元素拥有值为zh-cn的type属性。 
 /Articles/Article[Order>2]:选取Articles元素的所有Article元素,且其中的Order元素的值须大于2。 
 /Articles/Article[Order<3]/Title:选取Articles元素中的Article元素的所有Title元素,且其中的Order元素的值须小于3。

下面列出了最有用的路径表达式:
 nodename:选取此节点的所有子节点。 
 /:从根节点选取。 
 //:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 
 .:选取当前节点。 
 ..:选取当前节点的父节点

C#解析HTML神器 Html Agility Pack的更多相关文章

  1. C#解析HTML利器-Html Agility Pack

    今天刚开始做毕设....好吧,的确有点晚.我的毕设设计需要爬取豆瓣的电影推荐,于是就需要解析爬取下来的html,之前用Python玩过解析,但目前我使用的是C#,我觉得C#不比python差,有微软大 ...

  2. html解析器:Html Agility Pack

    去掉注释.样式.和js代码: foreach(var script in doc.DocumentNode.Descendants("script").ToArray()) scr ...

  3. Html Agility Pack 解析Html

    Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面  用Fir ...

  4. 开源项目Html Agility Pack实现快速解析Html

    这是个很好的的东西,以前做Html解析都是在用htmlparser,用的虽然顺手,但解析速度较慢,碰巧今天找到了这个,就拿过来试,一切出乎意料,非常爽,推荐给各位使用. 下面是一些简单的使用技巧,希望 ...

  5. Html Agility Pack解析HTML页

    文章来源:Html Agility Pack解析HTML页 现在,在不少应用场合中都希望做到数据抓取,特别是基于网页部分的抓取.其实网页抓取的过程实际上是通过编程的方法,去抓取不同网站网页后,再进行分 ...

  6. 强大而灵活的的Html解析器——Html Agility Pack

    一.概述 Html Agility Pack 简称HAP,是一个强大而灵活的解析Html DOM的.Net类库. 二.官方链接 官网:http://html-agility-pack.net/ NuG ...

  7. C# 网络爬虫利器之Html Agility Pack如何快速实现解析Html

    简介 现在越来越多的场景需要我们使用网络爬虫,抓取相关数据便于我们使用,今天我们要讲的主角Html Agility Pack是在爬取的过程当中,能够高效的解析我们抓取到的html数据. 优势 在.NE ...

  8. 使用Html Agility Pack快速解析Html内容

    Html Agility Pack 是一个开源的.NET 方案HTML解析器. 开源地址:https://github.com/zzzprojects/html-agility-pack 用法:vs上 ...

  9. [c#] Html Agility Pack 解析HTML

    摘要 在开发过程中,很有可能会遇到这样的情况,服务端返回的是html的内容,但需要在客户端显示纯文本内容,这时候就需要解析这些html,拿到里面的纯文本.达到这样的目的可以有很多途径,比如自己写正则表 ...

随机推荐

  1. TOJ 2939 解救小Q

    描述 小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她.迷宫里面有一些陷阱,一旦走到陷阱里,就会被困身亡:(,迷宫里还有一些古老的传送阵,一旦走到传送阵上,会强制被传送到传送阵的另一头. ...

  2. Linux服务器性能评估与优化--转

    http://www.itlearner.com/article/4553 一.影响Linux服务器性能的因素 1. 操作系统级 Ø       CPU Ø       内存 Ø       磁盘I/ ...

  3. java基础之登录程序

    注:此版本仅供学习使用! Login.java import java.awt.Font; import java.awt.event.*; import java.sql.*; import jav ...

  4. OpenStack各组件详解和通信流程

    一.openstack由来 openstack最早由美国国家航空航天局NASA研发的Nova和Rackspace研发的swift组成.后来以apache许可证授权,旨在为公共及私有云平台建设.open ...

  5. caffe-windows中classification.cpp的源码阅读

    caffe-windows中classification.cpp的源码阅读 命令格式: usage: classification string(模型描述文件net.prototxt) string( ...

  6. show与ShowDialog substring

    substring public String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串.该子字符串从指定的 beg ...

  7. 01_Quartz基础结构

    [各种任务调度的使用场景] 论坛每天凌晨统计论坛用户的积分排名. 论坛每半个小时生成精华文章. 每隔30分钟对锁定过期的用户解锁. 每月1号统计上个月各部门的业务数据. [Quartz 简介] Qua ...

  8. SharePoint 2013 - REST Service

    0. SharePoint 2013使用_api来标识出 REST SERVICE,REST Service其实是 client.svc web service的一部分,但为了简化 REST URI的 ...

  9. Android Activity中状态保存机制

    在Activity中保存用户的当前操作状态,如输入框中的文本,一般情况下载按了home键后,重新进入文本框中的东西会丢下,所以我们要保存当前页面信息,如在写短信的时候接到一个电话,那么当你接电话的时候 ...

  10. asyncio标准库5 TCP echo client and server

    server import asyncio async def handle_echo(reader, writer): data = await reader.read(100) message = ...