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. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  2. 从I/O复用谈epoll为什么高效

    上一篇文章中,谈了一些网络编程的基本概念.在现实使用中,用的最多的就是I/O复用了,无非就是select,poll,epoll 很多人提到网络就说epoll,认为epoll效率是最高的.单纯的这么认为 ...

  3. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

  4. PHP源码分析-变量

    1. 变量的三要素变量名称,变量类型,变量值 那么在PHP用户态下变量类型都有哪些,如下: // Zend/zend.h #define IS_NULL 0 #define IS_LONG 1 #de ...

  5. 如何创建Vim Dotfile?

    Dotfile是电脑系统里的隐藏文件,它是专门给更高级的用户,如开发者.程序员或工程师使用的,让他们用来调整系统.如何创建Vim-Dotfile? 可以参考以下步骤: 1. 首先,你要检查一下.vim ...

  6. logstash file输入,无输出原因与解决办法

    1.现象 很多同学在用logstash input 为file的时候,经常会出现如下问题:配置文件无误,logstash有时一直停留在等待输入的界面 2.解释 logstash作为日志分析的管道,在实 ...

  7. Android和JavaScript相互调用的方法

    转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...

  8. 对Thoughtworks的有趣笔试题实践

    记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...

  9. c++ pair 使用

    1. 包含头文件: #include <utility> 2. pair 的操作: pair<T1,T2> p; pair<T1,T2> p(v1,v2); pai ...

  10. 新手学习web遇到的一些乱码问题

    在新手学习web网站学习的时候经常会遇到?????这种乱码,对于刚起步的菜鸟来说真的很头痛,很容易打击继续学的信心当然了对于菜鸟的我最近也遇到过乱码问题,沉浸其中不能自拔,爱的深啊!!!!!我所遇到的 ...