zoukankan      html  css  js  c++  java
  • 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");
  • 相关阅读:
    yolov3计算mAP
    ESP32 ADC的坑
    DCNv2编译过程报错:error: identifier "THCudaBlas_SgemmBatched" is undefined
    Arduino在Lib中输出调试参数
    ESP32获取WT901CTTL/232四元数
    常用公共前端CDN库
    js / php 网站底部版权文字自动改变年份
    以管理员身份在当前目录打开命令行窗口
    【JavaScript】提取字符串里的分数,及计算平均分并与平均分比较输出
    添加谷歌翻译到你的网站
  • 原文地址:https://www.cnblogs.com/hont/p/3771747.html
Copyright © 2011-2022 走看看