HtmlAgilityPack应该算是.Net下最好用的html解析库了。

因为最近帮朋友采集一些数据,在nuget里面搜索了好几个库,最后决定就用HtmlAgilityPack。并简单的记录下使用的姿势。

直接使用nuget包安装

Install-Package HtmlAgilityPack -Version 1.11.

1.下载网页

该库提供了一个下载网页的类:HtmlWeb

var webGet = new HtmlWeb();
var document = webGet.Load(url);

如果网络正常的话,就会拿到一个HtmlDocument的对象。后面我们所有的操作都是基于该类做的。

我个人更喜欢使用HttpClient来下载网页,然后使用HtmlDocument来LoadHtml。因为自己使用HTMLClient可控性更高。比如要加代理IP,随机设置UA等操作。

当然简单的使用,使用HtmlWeb就差不多了。

2.解析网页

第一步拿到的htmlDocument对象,里面提供了很多操作。

举个栗子,比如我们要获取网页的文章的作者,直接在Chrome中右键->审查元素->elements->右键->Copy->Copy Xpath

document.DocumentNode.SelectSingleNode("Chrome复制的xpath")?.InnerText

然后就成功采集到了作者名字

如何解析列表?

用博客园举栗子,首页就是一个列表文章页。我们如何获取到这个列表所有的项呢?

var nodes =  document.DocumentNode.SelectNodes("xpath表达式")

如果熟悉xpath的老哥们就知道使用双斜杠开头的,就可以获取到多项节点的结果。比如博客园的表达式为: //div[@class='post_item'],然后获取到HtmlDocument的一个集合,再解析集合的子节点,就行了!

如何删除标签?

有些文章中,会隐藏a标签来给批量采集的人下毒。

可以直接使用Descendants方法找到所有的a标签,然后删除

var aNodes = 获取到的HtmlDocument对象.DocumentNode.Descendants("a")
foreach (var anode in aNodes.ToArray())
{
anode.Remove();
}

如果要采集图片呢?

一般图片地址放在img的src属性上,

var imgNodes = detail.DocumentNode.Descendants("img");
foreach (var img in imgNodes)
{
string imgurl = img.GetAttributeValue("src","");
}

获取到地址,就可以使用HTTPClient来下载图片并保存到文件夹中

如何修改节点属性?

举个栗子,如果我们把图片上传到我们的服务器,然后要在文章中替换掉别人的图片地址,那应该怎么做呢?

 var imgNodes = detail.DocumentNode.Descendants("img");
foreach (var img in imgNodes)
{
img.SetAttributeValue("src", "图片地址");
}

基本上,掌握这几点,就能到处去采集别人的网站了。

当然HtmlAgilityPack的功能远远不止本文所描述的这些,更多的功能,可能需要有更深入的需求才会用到,

有不懂或者需要交流的大佬们,可以加我的QQ:862640563 QQ群:545594312

最新文章

  1. [ JS 进阶 ] 基本类型 引用类型 简单赋值 对象引用
  2. 安装MySQL5.7
  3. CentOS7 桌面的安装
  4. jquery checkbox的判断和设置方法
  5. 关于C函数的参数个数的问题
  6. 概率dp ZOJ 3640
  7. VirtualBox镜像复制载入
  8. UVA 620 Cellular Structure (dp)
  9. 收缩sql server数据库日志
  10. 自己动手实现一个简单的JSON解析器
  11. quartz的一些记录
  12. [Flask]学习杂记--模板
  13. 数组中的stdClass Object如何访问
  14. 20165211 学习基础和C语言调查
  15. NBUT 1220 SPY 2010辽宁省赛
  16. Yes,I know the way to learn Ens !
  17. PHP设计模式系列 - 观察者模式
  18. 坦克大战-C语言-详注版
  19. linux下部署tomcat服务器之安装jdk
  20. 如何优化tomcat配置优化

热门文章

  1. 牛客网暑期ACM多校训练营(第三场) C Shuffle Cards 平衡树 rope的运用
  2. B. Tea Queue codeforces Round.37.div2 队列
  3. 不权威的国产CPU发展历程
  4. 【Offer】[19] 【字符串匹配】
  5. mysql之innodb-锁
  6. jQuery的大小拖动
  7. 致初学者(一): HDU 2000~ 2013题解
  8. 彻底解决android拍照后无法显示的问题
  9. Android 网络通信框架Volley(二)
  10. asp.net core 使用 signalR(二)