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文档去领会学习其中更高级的用法。

原文地址:https://www.cnblogs.com/socialdk/p/2491407.html