zoukankan      html  css  js  c++  java
  • HtmlAgilityPack基础知识学习笔记

    HtmlAgilityPack是一款将HTML转换为XML,再通过XPATH来实现网页抓取的动态链接库。

    在解析DOM前先需要加载HTML的网页,可以用HtmlDocument类,此类封装了该方法。就拿博客园首页的各个文章的抓取为例,简单的加载为:

    WebClient wc = new WebClient();
                using (MemoryStream ms = new MemoryStream(wc.DownloadData(@"http://www.cnblogs.com"))) {
                    HtmlDocument doc = new HtmlDocument();
                    doc.Load(ms, Encoding.UTF8);}

    当把HTML加载进来以后,然后就可以解析HTML,此处用到了一个HtmlNode类,比较重要的有Attributes属性,例如<div class="diggit" onclick="DiggIt()">***</div>此处的class和onclick就是Attributes属性,可以在网页上面取到每个标题链接的URL。还有许多属性如FirstChild,LastChild,ChildNodes,ParentNode,都能够帮助找到你所需要的结果。同时,SelectSingleNode和SelectNodes对于找到所需要的内容也是有很大的帮助的。(SelectSingleNode:选择匹配 XPath 表达式的第一个XmlNode  SelectNodes:选择匹配 XPath 表达式的结点集合 XmlNodeList)。最后依靠InnerHtml和InnerText来输出想要得到的结果。

    同样拿博客园首页为例:

                    //获得所有博客总框架的ID节点
                    var main = doc.GetElementbyId("post_list");
                    //获得每一条博客的节点集合
                    var div = main.SelectNodes(".//a[@class='titlelnk' ]");
                    foreach (var each in div) {
                        //每条BLOG的标题名称
                        Console.WriteLine(each.InnerText.Trim());
                        //每条BLOG的URL
                        Console.WriteLine(each.Attributes[1].Value);
                    }

    这样就取到了标题以及链接。

    总结:这个简单的例子只是用到了最基础的功能。还可以查看查看Html Agility文档去领会学习其中更高级的用法。

  • 相关阅读:
    ACM的算法分类 2015-04-16 14:25 22人阅读 评论(0) 收藏
    初学Larevel 2014-08-21 11:24 90人阅读 评论(0) 收藏
    初学PHP&MySQL 2014-05-31 12:40 92人阅读 评论(0) 收藏
    codeforces 570 E. Pig and Palindromes (dp)
    codeforces 570 D. Tree Requests (dfs序)
    poj 2157 Maze (bfs)
    cf 570 C. Replacement (暴力)
    cf 570B B. Simple Game(构造)
    cf 570 A. Elections
    hdu 1429胜利大逃亡(续) (bfs+状态压缩)
  • 原文地址:https://www.cnblogs.com/socialdk/p/2491407.html
Copyright © 2011-2022 走看看