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");

 

 

发布了5 篇原创文章 · 获赞 0 · 访问量 3397
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览