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学习的更多相关文章
- HTML解析利器-HtmlAgility学习
原文:HTML解析利器-HtmlAgility学习 HtmlAgility是一个开源的Html解析库,据说是C#版的JQuery,功能非常强大. 该篇学习它的解析功能,还可以模拟用户请求,创建html ...
- DNS解析综合学习案例
DNS解析综合学习案例 #图右侧为做题前环境配置 #命令为红色 #命令加载内容为绿色 #vi编辑内容为蓝色 1.用户需把/dev/myvg/mylv逻辑卷以支持磁盘配额的方式挂载到网页目录下 [roo ...
- DNS解析综合学习案例(附详细答案)
1.用户需把/dev/myvg/mylv逻辑卷以支持磁盘配额的方式挂载到网页目录下2.在网页目录下创建测试文件index.html,内容为用户名称,通过浏览器访问测试3.创建用户账户,对LVM配置磁盘 ...
- [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林
[白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...
- [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识
[源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...
- [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入
[源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 目录 [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 0x00 摘要 0 ...
- [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver
[源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver 目录 [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & ...
- [源码解析] 深度学习分布式训练框架 horovod (3) --- Horovodrun背后做了什么
[源码解析] 深度学习分布式训练框架 horovod (3) --- Horovodrun背后做了什么 目录 [源码解析] 深度学习分布式训练框架 horovod (3) --- Horovodrun ...
- [源码解析] 深度学习分布式训练框架 horovod (5) --- 融合框架
[源码解析] 深度学习分布式训练框架 horovod (5) --- 融合框架 目录 [源码解析] 深度学习分布式训练框架 horovod (5) --- 融合框架 0x00 摘要 0x01 架构图 ...
随机推荐
- 通过WebRTC实现实时视频通信(二)
通过WebRTC实现实时视频通信(一) 通过WebRTC实现实时视频通信(二) 通过WebRTC实现实时视频通信(三) 在上一篇文章中,我们讲解了WebRTC的概述.历史.安全性和开发者工具.接下来我 ...
- iOS强引用和弱引用
保留一个对象创建了一个对该对象的“强”引用.一个对象只有在它的所有强引用都被释放后才能被回收.因此,一个对象的生命周期取决于其强引用的所有者.在某些情况下,这种行为可能并不理想.您可能想要引用一个对象 ...
- 关于Haxe3新特性“内联构造方法”的解释
学习过C/C++的童鞋们应该了解inline即内联机制的意义,Haxe语言也很好的支持内联机制,让开发者可以自己在空间效率和时间效率上进行取舍. 从Haxe3开始,构造方法也可以使用inline关键字 ...
- PHP高级教程-邮件
PHP 发送电子邮件 PHP 允许您从脚本直接发送电子邮件. PHP mail() 函数 PHP mail() 函数用于从脚本中发送电子邮件. 语法 mail(to,subject,message,h ...
- Hibernate框架简介(二)基本使用增、删、改、查
一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬 ...
- 原来Java中有两个ArrayList
首先给出一段代码: public class AslistMethod { public static void main(String[] args) { String sentence = &qu ...
- “最大子序列和”算法 java
maxSubSum各自是最大子序列和的4中java算法实现. 第一种算法执行时间为O(N^3),另外一种算法执行时间为O(N^2),第三种算法执行时间为O(nlogn),第四种算法执行时间为线性N p ...
- $stateParams 详解
如何传递参数(参考 http://www.cnblogs.com/jager/p/5293225.html) 首先,要在目标页面定义接受的参数: 传参, ui-sref: $state.go: 接收 ...
- DOS批处理高级教程
转载-->http://blog.csdn.net/lanbing510/article/details/7461073 前言 本教程主要引用伤脑筋版主的系列文章,同时参考引用[英雄]教程等其他 ...
- Unix 网络编程 读书笔记1
第一章: C/C++语言提供两种不同的编程模式:IPL32和PL64.► IPL32 ● 表示integer/pointer/long三种数据类型是32位(4个字节),在这种模式下,提供32位的地址空 ...