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

Html Agility Pack官网.大家用的同时也可以去github上star一下这个项目,支持一下.net开源项目.(首页上有其github的项目地址)

加载Html

有几种方式可以加载Html

  1. 从流(Stream)中加载

    HtmlWebRequest req = WebRequest.Create("https://www.cnblogs.com/Laggage/p/10740012.html") as HtmlWebRequest;
    HtmlWebResponse res = req.GetResponse() as HtmlWebResponse;
    Stream s = res.GetResponseStream(); HtmlDocument doc = new HtmlDocument();

    doc.Load(s)

  2. 从字符串加载Html(直接用的官网的一个例子)

    var html = @"<!DOCTYPE html>
    <html>
    <body>
    <h1>This is <b>bold</b> heading</h1>
    <p>This is <u>underlined</u> paragraph</p>
    <h2>This is <i>italic</i> heading</h2>
    </body>
    </html> "; var htmlDoc = new HtmlDocument();

    htmlDoc.LoadHtml(html); var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body"); Console.WriteLine(htmlBody.OuterHtml);

  3. 从文件加载

    string path = @"test.html";
    
    HtmlDocument doc = new HtmlDocument();

    doc.Load(path); HtmlNode node = doc.DocumentNode.SelectSingleNode("//body"); Console.WriteLine(node.OuterHtml);

  4. 还可以直接从网络上加载(套用官网的例子)

    string html = @"http://html-agility-pack.net/";
    
    HtmlWeb web = new HtmlWeb();
    
    HtmlDocument htmlDoc = web.Load(html);
    
    HtmlNode node = htmlDoc.DocumentNode.SelectSingleNode("//head/title");
    
    Console.WriteLine("Node Name: " + node.Name + "\n" + node.OuterHtml);

解析html

利用Html Agility Pack解析起html还是很容易的.主要利用XPath语法.同样套用官网的代码.

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html); string name = htmlDoc.DocumentNode

.SelectNodes("//td/input") //双斜杠表示查询所有的子节点,如果是只要查询范围在当前节点的下一层子节点,则只用一个子节点.

.First()

.Attributes["value"].Value;

主要就是利用 HtmlNode.SelectSingleNode()和HtmlNode.SelectNodes()方法来寻找节点.



这是 Html Agility Pack 官网首页的一段html,现在以要拿到其中的pre标签的所有内容为例.

string url = @"https://html-agility-pack.net/";
HtmlWeb web = new HtmlWeb(); HtmlDocument doc = web.Load(html); string text = doc.DocumentNode
.SelectSingleNode("//div[@class='side-body container-none page-index']/div[@class='container-examples-index d-flex justify-content-center']/pre")
.InnerText; Console.WriteLine(text);

具体的XPath语法可以看W3C的教程:W3CXPath教程.

  </div>

Html Agility Pack解析Html(C#爬虫利器)的更多相关文章

  1. Html Agility Pack解析HTML页

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

  2. Html Agility Pack 解析Html

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

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

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

  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. C#解析HTML利器-Html Agility Pack

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

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

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

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

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

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

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

随机推荐

  1. [ ZooKeeper]ZooKeeper 的功能和原理

    Zookeeper功能简介: ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现.分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅 ...

  2. Visual code 搭建Vue项目

    使用VS Code搭建Vue项目 1.安装 VScode 2..安装最新node.JS 2.安装cnpm镜像  淘宝镜像(node自带安装了npm,故不再安装) npm install -g cnpm ...

  3. 安装ADT和ADK到eclipse

    1.安装好JDK后,配置一下环境变量: 为了配置JDK的系统变量环境,我们需要设置三个系统变量,分别是JAVA_HOME,Path和CLASSPATH.下面是这三个变量的设置防范. JAVA_HOME ...

  4. 常见CSS

    .login_top_bg { background-image: url(/pcssc/images/login/login-top-bg.gif); background-repeat: repe ...

  5. navicat下创建和执行存储过程

  6. XML 解析的两种方法

    申请博客有一段时间了,一直没有写些什么,今天写一下被遗忘的 xml,因为 ios 现在一般都用 JSON,但毕竟还有一部分老一些的服务器还会有 xml xml 格式的解析方式有两种 1.SAX解析: ...

  7. 假期训练七(hdu-2845 dp,hdu-1846,2188 巴什博奕)

    题目一:传送门 思路:动态规划,从每一行来看,每次更新求出这一点的最大值,dp[i]=MAX(dp[i-1],dp[i]+dp[i-2]),不会出现 两个数字相邻的情况:先对行进行更新,再对列进行更新 ...

  8. JSON转JS对象,JS对象转JSON

    一.从服务端发来的json字符串,怎么才能作为JavaScript对象(JSON对象)在web端调用呢? 1.如果使用jQuery,就很方便了,可以在ajax一系列函数中,把参数Datatype传js ...

  9. springboot mybatis 分页整合

    spring boot 整合mybatis ,分两块mybatis 整合,分页整合.   1.pom文件增加 <dependency> <groupId>org.mybatis ...

  10. ssh scp 加端口

    scp -P one-infrastructure-api.tar.gz console@172.31.16.2:/root/ ssh -p console@172.31.16.2