使用C#抓取网页内容主要包括获取网页数据和分析网页内容两个步骤,网上很多文章介绍使用WebClient、WebBrowser、HttpWebRequest等获取网页数据,从之前微信收藏的文章中找到介绍网页数据抓取的文章《C# 手把手教你爬取优酷电影信息》(微信公众号“DotNet”,参考文献3),其中介绍的HtmlAgilityPack模块既支持根据网址获取内容,也支持通过xpath获取网页内容,使用简单方便,本文学习HtmlAgilityPack模块的基本用法,并以SqlSugar官网文档为例获取其中的各类帮助文档链接(下图左侧圈红处的链接)。
新建Winform项目,在Nugut包管理器中搜索并安装HtmlAgilityPack包,
使用HtmlAgilityPack命名空间中的HtmlWeb类下载指定网址的内容,使用十分简单,创建HtmlWeb对象实例后调用Load函数即可。
Load函数返回HtmlDocument对象实例,关于HtmlDocument类的详细介绍见参考文献4,本文中主要调用HtmlDocument.DocumentNode.SelectNodes函数获取网页中的链接地址。
SqlSugar官网文档的网页源码截图如下所示,网页左侧链接都位于class属性为layui-tree的列表集合内,SelectNodes函数输入参数用xpath语法描述的元素检索条件,根据参考文献2,只需检索class属性为layui-tree的元素内的所有链接元素即可。
关键代码及程序运行效果如下所示:
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument docu = web.Load(txtUrl.Text);
HtmlNodeCollection nodes = docu.DocumentNode.SelectNodes(@"//ul[@class='layui-tree']//a");
foreach (HtmlNode node in nodes)
{
DataGridViewRow dgvr = new DataGridViewRow();
dgvr.CreateCells(dataGridView1);
dgvr.Cells[0].Value = dataGridView1.Rows.Count + 1;
dgvr.Cells[1].Value = node.InnerText;
dgvr.Cells[2].Value = @"https://www.donet5.com" + node.Attributes["href"].Value;
dataGridView1.Rows.Add(dgvr);
}
参考文献:
[1]https://github.com/zzzprojects/html-agility-pack
[2]https://www.jianshu.com/p/b9cc7130debc
[3]https://www.cnblogs.com/foxhappy/p/14450449.html
[4]https://www.cnblogs.com/saodiseng2015/p/9368313.html