玖叶教程网

前端编程开发入门

C# 之门课程系列-24(c#教程)

HTML解析- HtmlAgilityPack

大家做过Python爬虫会发生Python有非常牛的库工具,像beatufulsoup等库,做爬页面确实非常方便。

HtmlAgilityPack是.net下的一个HTML解析类库。支持用XPath来解析HTML。这个意义不小,为什么呢?因为对于页面上的元素的xpath某些强大的浏览器能够直接获取得到,并不需要手动写。节约了大半写正则表达式的时间,当然正则表达式有时候在进一步获取的时候还需要写,但是通过xpath解析之后,正则表达式已经要匹配的范围已经非常小了。而且,不用正则表达式在整个页面源代码上匹配,速度也会有提升。总而言之,通过该类库,先通过浏览器获取到xpath获取到节点内容然后再通过正则表达式匹配到所需要的内容,无论是开发速度,还是运行效率都有提升。

HtmlAttribute

Html元素的属性

HtmlAttributeCollection

一个元素属性的集合

HtmlNode

HTML节点,包括注释,文本,元素

HtmlNodeCollection

一个HtmlNode节点集合

HtmlNodeType

一个枚举表示节点的类型,文档,注释,元素,文本。

HtmlTextNode

对应Html文本节点,很简单的一个类,继承自HtmlNode。

HtmlEntity


实用程序类以替换特殊字符的实体

HtmlParseError

表示文档在解析过程中发现的解析错误。

一个例子

 HtmlWeb webClient = new HtmlWeb();
            //初始化文档
            HtmlDocument doc = webClient.Load("http://www.cnblogs.com/");
            HtmlNodeCollection titleNodes = doc.DocumentNode.SelectNodes("//a[@class='post-item-title']");
            if (titleNodes != null)
            {
                foreach (var item in titleNodes)
                {
                    Console.WriteLine(item.InnerText);
                }
            }


/// <summary>
        /// 通过class取得数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGetBlogTItle_Click(object sender, EventArgs e)
        {
            lsvMain.Clear();
            lsvMain.Columns.Add("标题");
            lsvMain.Columns.Add("链接");
            HtmlWeb webClient = new HtmlWeb();
            //初始化文档
            HtmlAgilityPack.HtmlDocument doc = webClient.Load("http://www.cnblogs.com/");
            HtmlNodeCollection titleNodes = doc.DocumentNode.SelectNodes("//a[@class='post-item-title']");
            if (titleNodes != null)
            {
                foreach (var item in titleNodes)
                {
                    ListViewItem it = new ListViewItem();
                    it.Text = item.InnerText.ToString();
                    it.SubItems.Add(item.GetAttributeValue("href",""));
                    lsvMain.Items.Add(it);
                }
            }
        }
   private void btnGetByID_Click(object sender, EventArgs e)
        {
            HtmlWeb webClient = new HtmlWeb();
            //初始化文档
            HtmlAgilityPack.HtmlDocument doc = webClient.Load("https://www.cnblogs.com/soloversion/p/16100590.html");
            //通过Id取得值
            HtmlNode titleNode1 = doc.DocumentNode.SelectSingleNode("//a[@id='cb_post_title_url']");
            MessageBox.Show(titleNode1.InnerText);
            string href = doc.DocumentNode.SelectSingleNode("//a[@id='lnkBlogLogo']").GetAttributeValue("href","");
            MessageBox.Show(href);
        }
 private void btnRemoveHtml_Click(object sender, EventArgs e)
        {
            HtmlWeb webClient = new HtmlWeb();
            //初始化文档
            HtmlAgilityPack.HtmlDocument doc = webClient.Load("https://www.cnblogs.com/soloversion/p/16100590.html");
            string postBody = "";
            HtmlNode newnode = doc.DocumentNode.SelectSingleNode("//div[@class='postBody']");
            HtmlNode node2 = newnode.SelectSingleNode("div");
            HtmlNode node3 = HtmlNode.CreateNode("<b>Hello</b>");
            //在后面插入一个节点
            newnode.InsertAfter(node3, node2);
            newnode.RemoveChild(node3);
        }
private void btnGetChild_Click(object sender, EventArgs e)
        {
            lsvMain.Clear();
            lsvMain.Columns.Add("标签");
            lsvMain.Columns.Add("内容");
            HtmlWeb webClient = new HtmlWeb();
            //初始化文档
            HtmlAgilityPack.HtmlDocument doc = webClient.Load("https://www.cnblogs.com/soloversion/p/16100590.html");
            HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='postBody']");
            IEnumerable<HtmlNode> nodeList4 = node.Descendants();   //获取所有的子节点集合
            foreach (HtmlNode item in nodeList4)
            {
                
                ListViewItem it = new ListViewItem();
                it.Text = item.Name.ToString();
                it.SubItems.Add(item.InnerText.ToString());
                lsvMain.Items.Add(it);
            }
        }

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言