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

(Bug修复)C#爬虫,让你不再觉得神秘的更多相关文章

  1. 莫烦python课程里面的bug修复;课程爬虫小练习爬百度百科

    我今天弄了一下午修改这个代码,最后还是弄好了.原因是正则表达式的筛选不够准确,有时候是会带http:baidu这些东西的.所以需要一个正则表达式的断言,然后还有一点是如果his里面只有一个元素就不要再 ...

  2. 仿酷狗音乐播放器开发日志十九——CTreeNodeUI的bug修复二(附源码)

    转载请说明原出处,谢谢 今天本来打算把仿酷狗播放列表的子控件拖动插入功能做一下,但是仔细使用播放列表控件时发现了几个逻辑错误,由于我的播放 列表控件是基于CTreeViewUI和CTreeNodeUI ...

  3. OJ2.0userInfo页面Modify逻辑bug修复,search功能逻辑实现

    这周的主要任务:userInfo页面Modify逻辑bug修复,search功能逻辑实现. (一)Modify逻辑bug修复: 这里存在的bug就是在我们不重置password的时候依照前面的逻辑是不 ...

  4. cocos2d-x多分辨率和随后的自适应CCListView的bug修复

    cocos2d-x多分辨率自适配及因此导致的CCListView的bug修复 cocos2d-x是一款众所周知的跨平台的游戏开发引擎.因为其跨平台的特性.多分辨率支持也自然就有其需求. 因此.在某一次 ...

  5. android-misc-widgets四向(上下左右)抽屉bug修复版--转载

     android-misc-widgets四向(上下左右)抽屉bug修复版 2013-08-04 08:58:13 标签:bug down top panel slidingdrawer 原创作品,允 ...

  6. Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复

    写在前面的话 在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录.本文就是写一下发现问题的过程及解决方法.此bug在第一个项目中点这里还存在, ...

  7. 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 Bug修复

    开篇语 昨晚发了一篇: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 然后上午起来吃完午饭之后,我就准备继续开工的,但是突然的,想要看B站.然后在一股 ...

  8. Saiku Table展示数据合并bug修复(二十五)

    Saiku Table展示数据合并bug修复 Saiku以table的形式展示数据,如果点击了 非空的字段 按钮,则会自动进行数据合并,为空的数据行以及数据列都会自动隐藏掉. 首先我们应该定位问题: ...

  9. ThinkPHP 3.2.3+ORACLE插入数据BUG修复及支持获取自增Id的上次记录

    TP+ORACLE插入数据BUG修复以及获取自增Id支持getLastInsID方法 这些天在做Api接口时候,发现用TP操作Oracle数据库,发现查询修改删除都能执行, 但一旦执行插入操作老是报错 ...

随机推荐

  1. 快速入门python看过的一些资料

    我快速入门python看过的一些资料 B站的视频 10天自学Python,轻松掌握Python基础[千锋] 廖雪峰 - Python教程 https://www.liaoxuefeng.com/wik ...

  2. [原创]移远RM500U-CN模组驱动移植

    1. 简介 中国广电正式放号了,为了支持广电700MHz的5G基站,需要换用新的5G模组.移远通信的RM500U模组正好可以满足我们的使用要求; 我们选用该模组的原因:双卡单待 支持SIM卡热插拔 支 ...

  3. 虚拟机win7系统安装

    win7 x64虚拟机安装步骤 1.点击创建新虚拟机,选择典型 2.选择客户机操作系统:windows 7 x64 3.命名虚拟机 4.指定磁盘容量 5.点击完成 6.编辑此虚拟机设置 7.内存设置 ...

  4. fpga中的存储器

    fpga中的存储器三种:RAM,ROM,FIFO. RAM和ROM已经比较熟悉了,记录一下FIFO. FIFO:first in first out ,顺序存取,先入先出.是一种数据缓存器,用来作不同 ...

  5. 使用JAVA CompletableFuture实现流水线化的并行处理,深度实践总结

    大家好,又见面啦. 在项目开发中,后端服务对外提供API接口一般都会关注响应时长.但是某些情况下,由于业务规划逻辑的原因,我们的接口可能会是一个聚合信息处理类的处理逻辑,比如我们从多个不同的地方获取数 ...

  6. Azure Devops(十五) 使用Azure的私有Maven仓库

    上一篇文章中,我们介绍了如何使用Azure的nuget仓库,今天我们来研究一下如何使用azure给我们提供的maven仓库. 首先,我们打开azureDevops,点击到制品界面,然后选择maven. ...

  7. Lua 语言

    # Lua是一种轻量.小巧的脚本语言,用标准C语言编写并以源码形式开发.设计的摸底是为了嵌入到其他应用程序中,从而为应用程序提供灵活的拓展和定制功能. # Lua安装 # 官网:https://www ...

  8. Java开发学习(二十三)----SpringMVC入门案例、工作流程解析及设置bean加载控制

    一.SpringMVC概述 SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装.SpringMVC是处于Web层的框架,所以其主要的作用就是用来 ...

  9. Redis 定长队列的探索和实践

    vivo 互联网服务器团队 - Wang Zhi 一.业务背景 从技术的角度来说,技术方案的选型都是受限于实际的业务场景,都以解决实际业务场景为目标. 在我们的实际业务场景中,需要以游戏的维度收集和上 ...

  10. 什么是云计算?云计算三种模式Sass、Paas、Iaas

    云计算 云计算的"云"指的是计算机网络(一般指的是 Internet),"计算"指的是多个计算机共同计算巨大的数据的过程.通过云计算平台把任务分解成一个个小的任 ...