• 向德荣寓言:农夫、青蛙与苍蝇(原创首发) 2019-05-19
  • 杭州教师史记体评语引热议 网友直呼有才、用心 2019-05-13
  • 晋世绘——黄河新闻网 2019-05-13
  • 河北:举报环境违法行为最高可奖励5万元 2019-05-05
  • 魏占军的专栏作者中国国家地理网 2019-05-02
  • 回复@老老保老张工:那边有个铁环,比较适合伪高工玩…… 2019-05-02
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-04-20
  • 让中国高铁领跑世界——我国高铁装备业唯一女总工程师梁建英 2019-04-19
  • eHub发布“鲁班”智能营销云 重塑智能时代的商业变革 2019-04-18
  • 拜博口腔医疗集团创始人、董事长黎昌仁获第十二届人民企业社会责任奖年度人物奖 2019-04-18
  • 巴川中学王苗:留守儿童长大了 2019-04-15
  • 真正学进去 积极讲出来 扎实做起来市委常委部门分别召开会议传达学习全国两会精神 2019-04-15
  • 实拍武汉万人“父母相亲会”  现场“摆摊”征婚 2019-04-13
  • 丸子-热门标签-华商生活 2019-04-13
  • 房奴!房奴!亚历山大幸福吗? 2019-04-06
  • 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-05-19
  • 杭州教师史记体评语引热议 网友直呼有才、用心 2019-05-13
  • 晋世绘——黄河新闻网 2019-05-13
  • 河北:举报环境违法行为最高可奖励5万元 2019-05-05
  • 魏占军的专栏作者中国国家地理网 2019-05-02
  • 回复@老老保老张工:那边有个铁环,比较适合伪高工玩…… 2019-05-02
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-04-20
  • 让中国高铁领跑世界——我国高铁装备业唯一女总工程师梁建英 2019-04-19
  • eHub发布“鲁班”智能营销云 重塑智能时代的商业变革 2019-04-18
  • 拜博口腔医疗集团创始人、董事长黎昌仁获第十二届人民企业社会责任奖年度人物奖 2019-04-18
  • 巴川中学王苗:留守儿童长大了 2019-04-15
  • 真正学进去 积极讲出来 扎实做起来市委常委部门分别召开会议传达学习全国两会精神 2019-04-15
  • 实拍武汉万人“父母相亲会”  现场“摆摊”征婚 2019-04-13
  • 丸子-热门标签-华商生活 2019-04-13
  • 房奴!房奴!亚历山大幸福吗? 2019-04-06