• “两学一做”在山西——黄河新闻网 2019-07-13
  • 内地生报读香港高校本科人数持续下跌 2019-07-13
  • 【学习时刻】人民大学王义桅:金砖合作的“自信”与“自觉” 2019-07-12
  • 女子请“私家侦探”被骗3万 警方循线捣毁诈骗团伙 2019-07-11
  • 【学习时刻】北交大马院院长韩振峰:高校思想政治工作必须牢牢把握三大根本问题 2019-07-11
  • 全国“非遗”保护工作先进名单公布 2019-07-01
  • 紫光阁中共中央国家机关工作委员会 2019-06-25
  • 杭州控烟令修改草案拟允许室内设吸烟区,控烟专家:跌破眼镜 2019-06-25
  • 挪用近30万报纸征订款赌博 河南一报社聘用制干部获刑 2019-06-23
  • 2016年,有1145家上市公司大小非减持了3600亿元,还有210名上市公司高管减持了1400亿元。IPO已成了造就成千上万个十亿、百亿富豪的捷径, 2019-06-21
  • 专家“把脉”中国电影市场:提升品质方能逆袭 2019-06-21
  • “善款资助副局长儿子留学”真相须尽快落地 2019-06-19
  • 21岁女护士失联2天后确认遇害 嫌疑人为其前男友 2019-06-19
  • 中国地质公园名录旅行地中国国家地理网 2019-06-13
  • 玄关运用有四大原则 用的好才能财旺挡煞聚财 ——凤凰网房产 2019-06-10
  • Html Agility Pack解析Html(C#爬虫利器)

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

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

    加载Html

    有几种方式可以加载Html

    1. 从流(Stream)中加载

      HtmlWebRequest req = WebRequest.Create("//www.aavbg.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 = @"//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教程.

    posted @ 2019-04-20 10:41 Laggage 阅读(...) 评论(...) 编辑 收藏
  • “两学一做”在山西——黄河新闻网 2019-07-13
  • 内地生报读香港高校本科人数持续下跌 2019-07-13
  • 【学习时刻】人民大学王义桅:金砖合作的“自信”与“自觉” 2019-07-12
  • 女子请“私家侦探”被骗3万 警方循线捣毁诈骗团伙 2019-07-11
  • 【学习时刻】北交大马院院长韩振峰:高校思想政治工作必须牢牢把握三大根本问题 2019-07-11
  • 全国“非遗”保护工作先进名单公布 2019-07-01
  • 紫光阁中共中央国家机关工作委员会 2019-06-25
  • 杭州控烟令修改草案拟允许室内设吸烟区,控烟专家:跌破眼镜 2019-06-25
  • 挪用近30万报纸征订款赌博 河南一报社聘用制干部获刑 2019-06-23
  • 2016年,有1145家上市公司大小非减持了3600亿元,还有210名上市公司高管减持了1400亿元。IPO已成了造就成千上万个十亿、百亿富豪的捷径, 2019-06-21
  • 专家“把脉”中国电影市场:提升品质方能逆袭 2019-06-21
  • “善款资助副局长儿子留学”真相须尽快落地 2019-06-19
  • 21岁女护士失联2天后确认遇害 嫌疑人为其前男友 2019-06-19
  • 中国地质公园名录旅行地中国国家地理网 2019-06-13
  • 玄关运用有四大原则 用的好才能财旺挡煞聚财 ——凤凰网房产 2019-06-10
  • 澳客让分胜负 本站新疆喜乐彩 期本期特码 必赢中中三肖中特 2019年双色球最高奖金 甘肃快3预测专家预测 幸运28北京28开奖结果 湖南幸运赛车网上买 广东快乐10分外围 六合图库app 彩票3d公式规律 爱彩人辽宁11选5 上海时时彩玩法 青海十一选五开奖走势图 北京11选5开奖结果今天