1、使用第三方类库 HtmlAgilityPack

官方网址:https://html-agility-pack.net/?z=codeplex、

// From File 从文件获取html信息
var doc = new HtmlDocument();
doc.Load(filePath); // From String 从字符串获取html信息
var doc = new HtmlDocument();
doc.LoadHtml(html); // From Web 从网址获取html信息
var url = "http://html-agility-pack.net/";
var web = new HtmlWeb();
var doc = web.Load(url);

1.1、这里介绍一下最后一种用法

var web = new HtmlWeb();
var doc = web.Load(url);

web 中我们还可以设置cookie、headers等信息,来处理一些特定的网站需求,比如需要登陆等。

1.2 用法解释

网页在你查看网页源代码之后只是一段字符串,而爬虫所做的就是在这堆字符串中,查询到我们想要的信息,挑选出来。

以往的筛选方法:正则 (太麻烦了,写起来有些头疼)

HtmlAgilityPack 支持通过XPath来解析我们需要的信息。

1.2.1 在哪里找XPath?

网页右键检查

通过XPath就可以准确获取你想要元素的全部信息。

1.2.2 获取选中Html元素的信息?

获取选中元素

var web = new HtmlWeb();
var doc = web.Load(url);
var htmlnode = doc?.DocumentNode?.SelectSingleNode("/html/body/header")

获取元素信息

htmlnode.InnerText;
htmlnode.InnerHtml;
//根据属性取值
htmlnode?.GetAttributeValue("src", "未找到")

2、自己封装的类库

 /// <summary>
/// 下载HTML帮助类
/// </summary>
public static class LoadHtmlHelper
{
/// <summary>
/// 从Url地址下载页面
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public async static ValueTask<HtmlDocument> LoadHtmlFromUrlAsync(string url)
{
HtmlWeb web = new HtmlWeb();
return await
web?.LoadFromWebAsync(url);
} /// <summary>
/// 获取单个节点扩展方法
/// </summary>
/// <param name="htmlDocument">文档对象</param>
/// <param name="xPath">xPath路径</param>
/// <returns></returns>
public static HtmlNode GetSingleNode(this HtmlDocument htmlDocument, string xPath)
{
return htmlDocument?.DocumentNode?.SelectSingleNode(xPath);
} /// <summary>
/// 获取多个节点扩展方法
/// </summary>
/// <param name="htmlDocument">文档对象</param>
/// <param name="xPath">xPath路径</param>
/// <returns></returns>
public static HtmlNodeCollection GetNodes(this HtmlDocument htmlDocument, string xPath)
{
return htmlDocument?.DocumentNode?.SelectNodes(xPath);
} /// <summary>
/// 获取多个节点扩展方法
/// </summary>
/// <param name="htmlDocument">文档对象</param>
/// <param name="xPath">xPath路径</param>
/// <returns></returns>
public static HtmlNodeCollection GetNodes(this HtmlNode htmlNode, string xPath)
{
return htmlNode?.SelectNodes(xPath);
} /// <summary>
/// 获取单个节点扩展方法
/// </summary>
/// <param name="htmlDocument">文档对象</param>
/// <param name="xPath">xPath路径</param>
/// <returns></returns>
public static HtmlNode GetSingleNode(this HtmlNode htmlNode, string xPath)
{
return htmlNode?.SelectSingleNode(xPath);
} /// <summary>
/// 下载图片
/// </summary>
/// <param name="url">地址</param>
/// <param name="filpath">文件路径</param>
/// <returns></returns>
public async static ValueTask<bool> DownloadImg(string url ,string filpath)
{
HttpClient httpClient = new HttpClient();
try
{
var bytes = await httpClient.GetByteArrayAsync(url);
using (FileStream fs = File.Create(filpath))
{
fs.Write(bytes, 0, bytes.Length);
}
return File.Exists(filpath);
}
catch (Exception ex)
{ throw new Exception("下载图片异常", ex);
} }
}

3、自己写的爬虫案例,爬取的网站https://www.meitu131.com/

数据存储层没有实现,懒得写了,靠你们喽,我是数据暂时存在了文件中

GitHub地址:https://github.com/ZhangQueque/quewaner.Crawler.git

最新文章

  1. 关于sass的介绍和基本语法
  2. c/c++面试总结(3)
  3. 吴柄锡 github----MHA helper
  4. 关于switch的思考和总结
  5. listview滑动
  6. 树:BST、AVL、红黑树、B树、B+树
  7. 全球移动互联网大会gmic 2017为什么值得参加?
  8. MySQL常用配置参数
  9. Netty中的Channel之数据冲刷与线程安全(writeAndFlush)
  10. 使用FaceNet 图像相识度对比
  11. 探讨npm依赖管理之peerDependencies
  12. 细说shiro之七:缓存
  13. C语言 16进制与ascii码互转
  14. VMware中虚拟机与主机不能ping通解决办法
  15. Android开发之漫漫长途 XVII——动画
  16. FreeMarker之FTL指令
  17. 自学huawei之路-6005-8AP设备启动界面
  18. 全面剖析Smarty缓存机制一[三种缓存方式]
  19. 20155306 实验二 Java面向对象程序设计
  20. &#127749; 使用 Dawn 快速搭建 React 项目!

热门文章

  1. 关于Folx一些使用方面的问题详细解答
  2. Vegas让人物回眸更有韵味的方法分享
  3. Shamir秘密共享方案 (Python)
  4. P1633 二进制
  5. 【P4211 LNOI2014】LCA——树链剖分 +询问离线
  6. miniconda安装及使用
  7. ios中关于系统定位CLLocationManager的使用解析
  8. vm虚拟机安装centos7。克隆镜像以及快照
  9. 微服务注册到Nacos的IP私网172.x.x.x网段无法访问的问题
  10. RocketMq(三):server端处理框架及消费数据查找实现