HtmlAgilityPack简介

HtmlAgilityPack是.net下的一个HTML解析类库。支持用XPath来解析HTML。

问题来了,有人就会问为什么要使用能XPath呢? 小编答:因为对于在web端界面上的元素的xpath,在大部分游览器能够直接获取到,不用手动写。

✍对于HtmlAgilityPack总结:通过这个类库,先通过浏览器获取到xpath获取到节点内容然后再通过正则表达式匹配所需要的内容。

使用HtmlAgilityPack库的操作流程

工具VS2022

NuGet包进行下载安装

HtmlAgilityPack库的一些类的说明

  • HtmlAttribute--Html元素的属性
  • HtmlAttributeCollection--一个元素属性的集合
  • HtmlNode--HTML节点,包括注释,文本,元素等
  • HtmlNodeCollection--一个HtmlNode节点集合
  • HtmlNodeType--一个枚举 表示节点的类型,文档,注释,元素,文本
  • HtmlTextNode--Html文本节点
  • HtmlEntity--对应实体
  • HtmlParseError--表示文档在解析过程中发现解析错误
  • 下面示例适配部分没有反编译的---初步学习使用
private void Button_Click(object sender, RoutedEventArgs e) {
//这里因为网页上有些是动态获取数据,所以引入了一个第三个库,使用里面的一个WebView2控件获取网页数据
webView.Source = new Uri(txt.Text);
} private void Button_Click_1(object sender, RoutedEventArgs e) {
GetMedia(".//img", @"下载路径");
} private void Button_Click_2(object sender, RoutedEventArgs e) {
GetMedia(".//video", @"下载路径");
GetMedia(".//source", @"下载路径");
}
HtmlDocument doc=new HtmlDocument();
public async void GetMedia(string parameter, string dir) {
var str = "";
//解决网页乱码和不适配
object obj = await webView.CoreWebView2.ExecuteScriptAsync("document.documentElement.outerHTML");
str=Regex.Unescape(obj.ToString()).Replace("\"<html>", "<html>").Replace("</html>\"", "</html>");
doc.LoadHtml(str);
var elements = doc.DocumentNode.SelectNodes(parameter);
if (elements != null) {
foreach (var el in elements) {
if (el.Attributes.Contains("src")) {
var url = el.Attributes["src"].Value;
if (!string.IsNullOrEmpty(url) && url.StartsWith("http")) {
Uri uri = new Uri(url);
var fileName=uri.Segments.Last().ToLower();
DownLoad(url, $@"{dir}{fileName}");
}
}
}
}
} public static bool DownLoad(string uri, string localFileName) {
try {
string ext = Path.GetExtension(localFileName);
if (string.IsNullOrEmpty(ext)) {
localFileName += ".png";
}
var server = new Uri(uri);
var p = Path.GetDirectoryName(localFileName);
if (!Directory.Exists(p)) Directory.CreateDirectory(p); // 发起请求并异步等待结果
var httpClient = new HttpClient();
var responseMessage = httpClient.GetAsync(server).Result;
if (responseMessage.IsSuccessStatusCode) {
using (var fs = File.Create(localFileName)) {
// 获取结果,并转成 stream 保存到本地。
var streamFromService = responseMessage.Content.ReadAsStreamAsync().Result;
streamFromService.CopyTo(fs);
return true;
}
} else
return false;
} catch {
return false;
}

C#使用HtmlAgilityPack解析Html 爬取图片和视频的更多相关文章

  1. python如何使用request爬取图片

    下面是代码的简单实现,变量名和方法都是跑起来就行,没有整理,有需要的可以自己整理下: image2local: import requests import time from lxml import ...

  2. 爬取图片过程遇到的ValueError: Missing scheme in request url: h 报错与解决方法

    一 .scrapy整体框架 1.1 scrapy框架图 1.2 scrapy框架各结构解析 item:保存抓取的内容 spider:定义抓取内容的规则,也是我们主要编辑的文件 pipelines:管道 ...

  3. python +requests 爬虫-爬取图片并进行下载到本地

    因为写12306抢票脚本需要用到爬虫技术下载验证码并进行定位点击所以这章主要讲解,爬虫,从网页上爬取图片并进行下载到本地   爬虫实现方式: 1.首先选取你需要的抓取的URL:2.将这些URL放入待抓 ...

  4. HtmlAgilityPack解析全国区号页面到XML

    需求:完成一个城市和区号的xml配置文件 处理思路:通过HtmlAgilityPack解析一个区号页面,生产xml文件 页面:http://www.hljboli.gov.cn/html/code.h ...

  5. Java jsoup爬取图片

    jsoup爬取百度瀑布流图片 是的,Java也可以做网络爬虫,不仅可以爬静态网页的图片,也可以爬动态网页的图片,比如采用Ajax技术进行异步加载的百度瀑布流. 以前有写过用Java进行百度图片的抓取, ...

  6. [python爬虫] 爬取图片无法打开或已损坏的简单探讨

    本文主要针对python使用urlretrieve或urlopen下载百度.搜狗.googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨.同时 ...

  7. scrapy爬虫,爬取图片

    一.scrapy的安装: 本文基于Anacoda3, Anacoda2和3如何同时安装? 将Anacoda3安装在C:\ProgramData\Anaconda2\envs文件夹中即可. 如何用con ...

  8. scrapy爬虫系列之三--爬取图片保存到本地

    功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...

  9. 孤荷凌寒自学python第八十二天学习爬取图片2

    孤荷凌寒自学python第八十二天学习爬取图片2 (完整学习过程屏幕记录视频地址在文末) 今天在昨天基本尝试成功的基础上,继续完善了文字和图片的同时爬取并存放在word文档中. 一.我准备爬取一个有文 ...

  10. 孤荷凌寒自学python第八十一天学习爬取图片1

    孤荷凌寒自学python第八十一天学习爬取图片1 (完整学习过程屏幕记录视频地址在文末) 通过前面十天的学习,我已经基本了解了通过requests模块来与网站服务器进行交互的方法,也知道了Beauti ...

随机推荐

  1. new 的原理是什么?通过 new 的方式创建对象和通过字面量 创建有什么区别?

    涉及面试题: new 的原理是什么?通过 new 的方式创建对象和通过字面量 创建有什么区别? 在调用 new 的过程中会发生四件事情 新生成了一个对象: 链接到原型: 绑定 this : 返回新对象 ...

  2. pandas之时间操作

    顾名思义,时间序列(time series),就是由时间构成的序列,它指的是在一定时间内按照时间顺序测量的某个变量的取值序列,比如一天内的温度会随时间而发生变化,或者股票的价格会随着时间不断的波动,这 ...

  3. PHP读取XML文件的三种方式

    一  用  simplexml_load_file 读取xml文件 <?php $xml_array=simplexml_load_file('person.xml'); //将XML中的数据, ...

  4. vulnhub靶场之CROSSROADS: 1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:Crossroads: 1,下载地址:https://download.vulnhub.com/crossroads/crossroads_vh ...

  5. 深谈Spring如何解决Bean的循环依赖

    1. 什么是循环依赖 Java循环依赖指的是两个或多个类之间的相互依赖,形成了一个循环的依赖关系,这会导致程序编译失败或运行时出现异常.下面小岳就带大家来详细分析下Java循环依赖. 简单来讲就是:假 ...

  6. 从原理聊JVM(一):染色标记和垃圾回收算法

    作者:京东科技 康志兴 1 JVM运行时内存划分 1.1 运行时数据区域 • 方法区 属于共享内存区域,存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.运行时常量池,属于方法 ...

  7. office办公套件基础教程

    正文 1.网页端的应用-office全家桶 这里我选择先聊web端的应用,首先,我们来想象一下,只要你有网络,有浏览器,就能打开一个网页,在网页上进行编辑.处理一些word.报表.ppt等,你不需要复 ...

  8. 2021-09-25:给定一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词指字母相同,但排列不同的字符串。示例 1:输入: strs = [“eat“, “tea“, “

    2021-09-25:给定一个字符串数组,将字母异位词组合在一起.可以按任意顺序返回结果列表.字母异位词指字母相同,但排列不同的字符串.示例 1:输入: strs = ["eat" ...

  9. 时间函数strftime和strptime的差别

    strftime是转换为特定格式输出, strptime是将一个时间字符串解析为时间类型对象. strftime是按照想要的格式,去转换.重点是格式! strptime不管什么格式,只要把特定的时间字 ...

  10. vue小坑之Vetur报错:相对路径报错

    话不多说先上图 俗话说:面向百度编程,这话是没错滴,找不到相同问题的博客至少你还可以找谷歌翻译 以上图片问题就是:你导入的组件的相对路径不对.(有可能是你手动敲进去的,然后vetur这边检测不到) 解 ...