【工作笔记0006】C#调用HtmlAgilityPack类库实现网页数据抓取

本文介绍如何利用HtmlAgilityPack这一强大的.NET组件进行网页数据抓取。通过一个具体的示例展示了如何从指定博客页面抓取文章标题、链接、发布时间、阅读次数及评论次数等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近在学习HtmlAgilityPack,发现它的类库函数是非常的强大的,对于实现网页数据的抓取是非常的方便的。下面是一个运用HtmlAgilityPack抓取数据的简单例子,目标是抓取我的个人博客的文章列表数据,路径如下:adamlevine7的个人博文目录

    核心代码如下:

1.先引用HtmlAgilityPack.dll;

2.编写函数:

        private void start_Click(object sender, EventArgs e)
        {
            WebClient wb = new WebClient();
            wb.Encoding = Encoding.UTF8;
            string returnHtml = wb.DownloadString("http://blog.youkuaiyun.com/adamlevine7?viewmode=contents");<span style="color:#330099;">//第一步下载页面源码</span>
            if (returnHtml != "")
            {
                richTextBox1.Text += "-------开始抓取数据-------\r\n";
                //实例化HtmlAgilityPack.HtmlDocument对象
                HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                //载入HTML
                doc.LoadHtml(returnHtml);//第二步将源码载入到HtmlDocument对象中

                //根据HTML节点NODE的ID获取节点
                HtmlNode articleNode = doc.GetElementbyId("article_list");//第三步寻找起始节点

                //根据 XPATH路径表达式 来索引节点
                HtmlNodeCollection titleList = articleNode.SelectNodes("//span[@class='link_title']/a");  //获取含有文章标题的a标签
                HtmlNodeCollection timeList = articleNode.SelectNodes("//span[@class='link_postdate']");  //获取含有发布时间的span标签
                HtmlNodeCollection viewList = articleNode.SelectNodes("//span[@class='link_view']");  //获取含有阅读次数的span标签
                HtmlNodeCollection commentsList = articleNode.SelectNodes("//span[@class='link_comments']");  //获取含有评论次数的span标签
                BaseArticle ba = new BaseArticle();
                for (int i = 0; i < titleList.Count; i++)
                {
                    //第四步截取所需内容
                    ba.title = titleList[i].InnerText.Trim();
                    ba.blogUrl = blog + titleList[i].Attributes["href"].Value.ToString().Trim();
                    ba.postDate = timeList[i].InnerText.Trim();
                    ba.viewTimes = Convert.ToInt32(viewList[i].InnerText.Replace("阅读(", "").Replace(")", "").Trim());
                    ba.commentTimes = Convert.ToInt32(commentsList[i].InnerText.Replace("评论(", "").Replace(")", "").Trim());
                    //第五步显示数据,或将数据存入数据库
                    richTextBox1.Text += "标题:" + ba.title + "\r\n";//输出到ui显示
                    richTextBox1.Text += "详情页面地址:" + ba.blogUrl + "\r\n";
                    richTextBox1.Text += "发布日期:" + ba.postDate + "\r\n";
                    richTextBox1.Text += "阅读次数:" + ba.viewTimes + "\r\n";
                    richTextBox1.Text += "评论次数:" + ba.commentTimes + "\r\n";
                }
                richTextBox1.Text += "-------结束-------\r\n";
            }
        }
3.运行截图:

    看了上面的例子,是不是觉得很简单?!没错,HtmlAgilityPack就是这么牛逼!它是一个开源的.net组件,

官方地址:http://htmlagilitypack.codeplex.com/

    当然也有跟HtmlAgilityPack类似的处理html的组件类库,如AngleSharp、CsQuery等,关于这三者的讨论你在Google上随便一搜就有,至于哪个好哪个更实用,这就要看实际需求了,个人建议选择 HtmlAgilityPack,因为它轻量级、速度快,国外有人做过相关的测试结果如下:

https://github.com/FlorianRappl/AngleSharp/wiki/Performance

所以,请根据实际情况选择吧,反正三者都有各有优点。

关于HtmlAgilityPack类库的常用属性和函数说明,我在博客园找到了一篇比较全的文章,分享给大家,很实用:

HtmlAgilityPack 之 HtmlNode类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值