原文:HTML解析利器-HtmlAgility学习

HtmlAgility是一个开源的Html解析库,据说是C#版的JQuery,功能非常强大。

该篇学习它的解析功能,还可以模拟用户请求,创建html,设置代理等等,暂先不研究。

----------------------------------------------------------------------------

1.简单例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net; using HtmlAgilityPack; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
HtmlWeb webClient = new HtmlWeb();
HtmlDocument doc = webClient.Load("http://www.baidu.com");
var rootNode = doc.DocumentNode;
HtmlNodeCollection categoryNodeList = rootNode.SelectNodes("//html[1]/body[1]");
foreach (var item in categoryNodeList)
{
Console.WriteLine("item: " + item.Name);
} Console.Read();
}
}
}

算是第一个Hellow world,扒的百度页面。

----------------------------------------------------------------------------

2.读取

那么,如果是载入本地的Html或者直接读流,字符串。可以这么做

HtmlDocument doc = new HtmlDocument();
doc.Load(@"D:\xxx.mht", Encoding.UTF8, false);
public void LoadHtml(string html);//直接读字符串化的html
public void Load(Stream stream);//流
public void Load(string path);//本地路径

HtmlDocumen其本身也提供检测编码的方法。

HtmlWeb主要是自动检测编码,如果要自定义编码可以改其中属性。OverrideEncoding, AutoDetectEncoding。而HtmlDocument对编码的操作反而不一样,指定在参数中,估计是自动检测编码已经很强大了把,很少要自己指定。。。。

----------------------------------------------------------------------------

3.节点选择

rootNode.SelectNodes
rootNode.SelectSingleNode

选择节点和选择单个节点。

用SelectNodes为例,看一下参数

rootNode.SelectNodes("//html[1]/body[1]");

"//"双斜杠表示从根节点查找所有子节点

"/"单斜杠表示只查找第一层子节点

"./"点斜杠表示从当前节点开始查找

[]中括号中的代表相同名字的子节点索引。

var resultList = rootNode.SelectNodes("//html[1]/body[1]/div[1]/div[position()<5]");//取前4个元素
resultList = rootNode.SelectNodes("//html[1]/body[1]/div[1]/div[last()]");//取最后1个元素
resultList = rootNode.SelectNodes("//html[1]/body[1]/div[1]/div[@id]");//取所有有id属性的元素
resultList = rootNode.SelectNodes("//html[1]/body[1]/div[1]/div[@id='head']");//取属性id值为head的元素

更多属性可以在W3SCHOOL查看http://www.w3school.com.cn/xpath/xpath_functions.asp

取属性

doc.Attributes["id"];

取元素

doc.GetElementbyId("id");

HTML解析利器-HtmlAgility学习的更多相关文章

  1. Java进阶学习:JSON解析利器JackSon

    Java:JSON解析利器JackSon JackSon基础 1.Maven项目引入 <!-- https://mvnrepository.com/artifact/org.codehaus.j ...

  2. .NET Core HtmlAgilityPack HTML解析利器

    最近学习.NET Core ,想把自己之前的一个项目升级到 .NET Core. 发现HtmlAgilityPack 没法进行引用,遂自己做了些修改,可以运行在 .NET Core 中.现在分享出来, ...

  3. 【爬虫入门手记03】爬虫解析利器beautifulSoup模块的基本应用

    [爬虫入门手记03]爬虫解析利器beautifulSoup模块的基本应用 1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.Bea ...

  4. 【网络爬虫入门03】爬虫解析利器beautifulSoup模块的基本应用

    [网络爬虫入门03]爬虫解析利器beautifulSoup模块的基本应用   1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.B ...

  5. 【Java】Java-XML解析利器-SAX-高性能-易用

    Java-XML解析利器-SAX-高性能-易用 java xml 大_百度搜索 (3)java处理比较大的xml文件 - SegmentFault How to read UTF-8 XML file ...

  6. Spring IOC设计原理解析:本文乃学习整理参考而来

    Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. I ...

  7. HTML解析HtmlAgility学习

    HtmlAgility是一个开源的Html解析库,据说是C#版的JQuery,功能非常强大. 该篇学习它的解析功能,还可以模拟用户请求,创建html,设置代理等等,暂先不研究. ----------- ...

  8. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  9. HTML解析利器HtmlAgilityPack

    一个.NET下的HTML解析类库HtmlAgilityPack.HtmlAgilityPack是一个支持用XPath来解析HTML的类库,在花了一点时间学习了解HtmlAgilityPack的API和 ...

随机推荐

  1. html学习笔记二

    html图片标记 <html> <head> <title>图片演示</title> </head> ----------------图片演 ...

  2. Android使用开源项目Xutils实现多线程下载文件

    #1.下载utils项目 https://github.com/wyouflf/xUtils #2布局文件里实现UI <LinearLayout xmlns:android="http ...

  3. cocos2d-x 3.1.1 学习笔记[21]cocos2d-x 创建过程

    文章出自于  http://blog.csdn.net/zhouyunxuan RootViewController.h #import <UIKit/UIKit.h> @interfac ...

  4. C++输出数据到txt

    平时总遇到将数据写到txt中的情况,尤其是在调试程序看中间结果时,所以将代码保存下来,方便以后应用: ofstream outfile; string InitialFileName("In ...

  5. PoolBoy

    PoolBoy  source code : https://github.com/devinus/poolboy Checkout ready({checkout, Block, Timeout}, ...

  6. hdu 3572 Task Schedule (dinic算法)

    pid=3572">Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  7. 于linux已安装moodle

    本文介绍了两个虚拟机的安装linux server 及相关服务,随着后这些基础.安装应用程序服务 moodle 2.7+  它是使用最广泛的平台,网络课程. 在安装过程中moodle之前,需要支持软件 ...

  8. nginx 提供静态内容

    Serving Static Content 提供静态内容 原文地址:http://nginx.com/resources/admin-guide/serving-static-content/ Th ...

  9. 终结者:具体解释Nginx(一)

            相信非常多人都听过Nginx.这个小巧的东西能够和Apache及IIS相媲美. 那么它有什么作用呢?一句话.它是一个减轻Web应用server(如Tomcat)压力和实现Web应用se ...

  10. 【CTO辩论】移动创业大军:谁斗争or变更代理

    众创时代.英雄辈出. 但千军万马过独木桥,竞争厮杀也异常残酷.有人说,这个时代不宜创业,由于技术门槛高了.推广难度高了.盈利模式没了.创业变重了.玩法变了...... 也有人说,时势造英雄.天时地利人 ...