HtmlAgilityPack使用

HtmlAgilityPack是一套用于抓取网页页面信息的组件。

一、引用

要使用这套组件,请先在vs中NuGet程序管理器为项目安装HtmlAgilityPack。

二、加载文档

为你的类添加HtmlAgilityPack引用是肯定的啦。

首先需要有要抓取的页面地址。string pUrl =“www.baidu.com”.有些页面嵌套了iframe页,那么在使用iframe包含页前需要获取iframe的src。后面会讲到。

在加载页面前需要进行一个处理,先贴代码如下:

GetHtmlStr(){

WebRequest rGet = WebRequest.Create(url);
WebResponse rSet = rGet.GetResponse();
Stream s = rSet.GetResponseStream();
StreamReader reader = new StreamReader(s, Encoding.GetEncoding("gb2312"));
return reader.ReadToEnd();

}

看代码是进行了一个编码操作。

还有另外一种方式:

    HtmlWeb web = new HtmlWeb();
       HtmlAgilityPack.HtmlDocument doc = web.Load(url);
       HtmlNode rootnode = doc.DocumentNode;

但这种方式读取到的汉字是乱码,还没有找到解决之法。

好了,我们拿到了一个经过编码的字符串,包含了页面所有内容。下面在HtmlAgilityPack中处理它。

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(GetHtmlStr(path));

HtmlDocument 是整个文档,可以通过DocumentNode获得所有节点。

如果有iframe,这里就要先获取iframe的src,再使用同样代码得到子页的HtmlDocument

获取iframe的src:var cInfo = doc.GetElementbyId("iframeName").Attributes["src"].Value;

 

三、查找元素

1、上面通过GetElementbyId可以查找有id的元素

2、通过文档结构获取到元素。

  doc.DocumentNode.SelectNodes("/html[1]/body[1]/table[1]/tbody[1]/tr[2]/td[1]/table[1]/tbody[1]/tr[1]/td");

  在这里,元素位置是从1开始,而不是0。另外有些不需要tbody,这个要在使用中测试。

3、这里还有其它的获取方法,就是使用xpath进行匹配。我还没有使用到,就不作陈述了。

拿到元素节点以后,我们可以通过innerText来获取值。

一个简单的HtmlAgilityPack使用方法就是这些了。

转载于:https://www.cnblogs.com/moyanger/p/4505192.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值