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

打开页面  用Firebug 找到文章列表的内容区域

如上面图片 我们已经找到了想要的内容 在Html 中的位置

那么接下来 第一步就是获取Html  然后 用Html Agility Pack 找出我们想要的东西

1. 获网页的Html

  #region 获取文章列表 +GetHtml(string url)
/// <summary>
/// 获取文章列表 Add shuaibi 2015-03-08
/// </summary>
/// <param name="url">页面地址</param>
/// <returns>文章列表</returns>
public List<Model> GetHtml(string url)
{
var myWebClient = new WebClient();
var myStream = myWebClient.OpenRead(url);
var list = GetMessage(myStream); //这里调用的是下面的方法
if (myStream != null) myStream.Close();
return list;
}
#endregion

2. 用Html Agility Pack 找出我们想要的东西

#region 处理文章信息 +GetMessage(Stream myStream)
/// <summary>
/// 处理文章信息 Add shuaibi 2015-03-08
/// </summary>
/// <param name="myStream">网页的数据流</param>
/// <returns></returns>
private static List<Model> GetMessage(Stream myStream)
{
var document = new HtmlDocument();
document.Load(myStream, Encoding.UTF8);
var rootNode = document.DocumentNode;
var messageNodeList = rootNode.SelectNodes(MessageListXPath);
return messageNodeList.Select(messageNode => HtmlNode.CreateNode(messageNode.OuterHtml)).Select(temp => new Model
{
Title = temp.SelectSingleNode(MessageNameXPath).InnerText,
Href = "http://blog.csdn.net" + temp.SelectSingleNode(MessageNameXPath).Attributes["href"].Value,
Content = temp.SelectSingleNode(MessageContxtXPath).InnerText,
Time = Convert.ToDateTime(temp.SelectSingleNode(MessageTimeXPath).InnerText),
ComeFrom = "csdn"
}).ToList();
}
#endregion

看完上面说完了方法和步骤 细心的你是不是发现的什么问题。哈哈,说一半天了都没说这类库怎么用,还有第二个方法里面那几个变量是啥。

现在来说怎么获取 Html Agility Pack 下载地址http://htmlagilitypack.codeplex.com/下载后解压压缩包就会发现HtmlAgilityPack.dll 在项目中右键添加引用就可以了

然后就是 几个变量的问题了

1.下面这句话是 获取全部 class为list_item article_item开始的div

/// <summary>
/// 获取文章列表
/// </summary>
private const string MessageListXPath = "//div[starts-with(@class,'list_item article_item')]";

2.下面这句话是 获取上面获取出来的集合里面每一项的标题

/// <summary>
/// 获取标题 解释: 第一个div,下的第一个div,下的第一个h1,下的第一个span,下的第一个a标签
/// </summary>
private const string MessageNameXPath = "/div[1]/div[1]/h1[1]/span[1]/a[1]";

3.和上面一样这个是获取内容

/// <summary>
/// 获取内容 解释: 第一个div,下的第二个div
/// </summary>
private const string MessageContxtXPath = "/div[1]/div[2]";

4.这个是获取发布时间

/// <summary>
/// 获取时间 这个就是 获取 第一个div,下的第3个div,下的span
/// </summary>
private const string MessageTimeXPath = "/div[1]/div[3]/span";

上面这些代码都是 根据第一张图片来的。

第二次发,说的不好请见谅。希望和大家成为盆友共同进步嘿嘿

最后附上实体内的代码

using System;

namespace MessageHelper
{
public class Model
{
public string Title { get; set; } //标题
public string Content { get; set; } //内容
public string Href { get; set; } //文章链接
public string ComeFrom { get; set; } //来源
public DateTime Time { get; set; } //发布时间 }
}

Html Agility Pack 解析Html的更多相关文章

  1. Html Agility Pack解析HTML页

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

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

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

  3. Html Agility Pack解析Html(C#爬虫利器)

    有个需求要写网络爬虫,以前接触过一个叫Html Agility Pack这个解析html的库,这次又要用到,然而发现以前咋用的已经不记得了,现在从头开始记录一下使用过程. Html Agility P ...

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

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

  5. Html Agility Pack基础类介绍及运用

    第一篇只对Html Agility Pack做了一个大概的介绍,在接下来的章节会比较深入的介绍Html Agility Pack. Html Agility Pack 源码中的类大概有28个左右,其实 ...

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

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

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

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

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

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

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

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

随机推荐

  1. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  2. NodeJs之pm2

    pm2 pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能. 开发过程中建议时不时的参看官方详细命令行使用:命令行 pm2 ...

  3. Virtual Box配置CentOS7网络(图文教程)

    之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...

  4. mac osx 安装redis扩展

    1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis   ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...

  5. json与JavaScript对象互换

    1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...

  6. Beanstalkd一个高性能分布式内存队列系统

    高性能离不开异步,异步离不开队列,内部是Producer-Consumer模型的原理. 设计中的核心概念: job:一个需要异步处理的任务,是beanstalkd中得基本单元,需要放在一个tube中: ...

  7. Oracle 数据库知识汇总篇

    Oracle 数据库知识汇总篇(更新中..) 1.安装部署篇 2.管理维护篇 3.数据迁移篇 4.故障处理篇 5.性能调优篇 6.SQL PL/SQL篇 7.考试认证篇 8.原理体系篇 9.架构设计篇 ...

  8. 【C#公共帮助类】 Utils 10年代码,最全的系统帮助类

    为大家分享一下个人的一个Utils系统帮助类,可能有些现在有新的技术替代,自行修改哈~ 这个帮助类主要包含:对象转换处理 .分割字符串.截取字符串.删除最后结尾的一个逗号. 删除最后结尾的指定字符后的 ...

  9. 注释生成Api文档

    1.开发背景 最近一直在写dubbo接口,以前总是用word文档写接口描述然后发给别人.现在太多了,而且跟别人对接联调的人家急着用,根本没时间去写word文档.那就想想怎么用doc文档注释自动生成接口 ...

  10. swift开发新项目总结

    新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案   1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编      考虑到新项目 ...