Bug修复

https://github.com/ZhangQueque/quewaner.Crawler/issues/1

修复加载Https网址中午乱码,导致Node解析失败的问题

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. 好文推荐系列---------JS模板引擎
  2. Android -- View移动的六种方法
  3. bash中不可以用字符串做数组下标
  4. 大数据BI积累
  5. with(nolock)的用法
  6. R12 供应商SQL
  7. PAT (Basic Level) Practise:1006. 换个格式输出整数
  8. rdf
  9. 安卓开发28:自定义View类
  10. Batch update returned unexpected row count from update [0] 异常处理
  11. 如何在Cocos2D游戏中实现A*寻路算法(二)
  12. char *p[] 和char**的思考
  13. python三种回收机制
  14. .NET 常用ORM之NHibernate
  15. mysql 开发基础系列10 存储引擎 InnoDB 介绍
  16. oracle服务端与客户端字符集不同导致中文乱码解决方案
  17. HDU - 3521 An easy Problem(矩阵快速幂)
  18. python - class类 (六) 三大特性 - 多态
  19. django 消息框架 message
  20. Codeforces852G(字符串hash)

热门文章

  1. 串口通信:接受数据(仿真task写法)
  2. AtCoder Beginner Contest 260 E // 双指针 + 差分
  3. 基于EasyExcel的大数据量导入并去重
  4. sqlDeveloper工具快速入门
  5. linux 安装 apache+mysql+php
  6. MySQL查询性能优化七种武器之索引潜水
  7. 新一代工作流调度-Apache DolphinScheduler 1.3.5 Docker镜像发布
  8. Apache DolphinScheduler 使用文档(6/8):任务节点类型与任务参数设置
  9. React报错之Type &#39;() =&gt; JSX.Element[]&#39; is not assignable to type FunctionComponent
  10. 给博客添加个充电按钮(仿B站)