HtmlAgilityPack快速实现网页爬虫

在之前项目中,如果要获取网页内的信息,都是用WebRequest获取网站源码,

然后自己用正则等方法匹配解析

正则写起来费时费力,易用性太差。

随即今天使用HtmlAgilityPack来实现高效的抓取DOM节点信息的获取

 

    在.NET技术下,解析html工具也很多,比如很多人可能会使用htmlparser,或者微软的MSHTML,htmlparser虽然比较易上手,但是相对应的解析速度较慢,而Html Agility Pack解析速度相当快,并且开源,易用,它可以帮助我们解析html文档就像用XmlDocument类来解析xml一样轻松、方便。

 

1.安装HtmlAgilityPack

 

创建HtmlDocument实例

HtmlDocument htmlDoc = new HtmlDocument();

htmlDoc.LoadHtml(_html);

//_html 是通过WebRequest获取的网页源码字符串

 

2.获取指定 Class的文本内容

例:获取 class=‘top_title’ 元素内的文本内容

string title = htmlDoc.DocumentNode.SelectSingleNode("//div[@id='main']").SelectSingleNode("//h2 [@class='top_title']").InnerText;

返回:

3D全景伯尼桑德斯总统竞选演讲

 

3.枚举节点

例:获取 maincontent 元素内 第二个p节点内容

string lg = htmlDoc.DocumentNode.SelectSingleNode("//div[@id='maincontent']").SelectNodes("//p")[1].InnerText;

返回:

视频语言:英语

 

4.获取指定元素的属性值

 

例:获取 a标签的href内容

string url = htmlDoc.DocumentNode.SelectSingleNode("//div [@id='voddownarea']").SelectNodes("//a")[0].GetAttributeValue("href", "");

返回:

http://d1.vrhd8.com:8003/vrdata/1172/[www.vrhd8.com]3D全景伯尼桑德斯总统竞选演讲.rar

 

5.示例总结

1.通过id 定位 header下的blogTitle节点信息

HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//div[@id='header']/div[@id='blogTitle']");

 

2.通过索引定位,div[2]是标识根节点的第二个

HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//div[2]/div[1]");

 

3.通过当前 titleNode节点,获取h1的节点

HtmlNode IDNode = titleNode.SelectSingleNode("./h1");

 

4.获取节点文本内容

IDNode.OuterHtml:属性返回的是包含当前节点的Html代码在内的所有Html代码

IDNode.InnerHtml:属性返回的是当前节点里面子节点的所有Html代码

IDNode.InnerText:属性过滤掉了所有的Html标记代码,只返回文本值

 

5.获取某个标签所有节点

HtmlNodeCollection uiListNodes = doc.DocumentNode.SelectNodes("//ui[@id='navList']/li");

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值