C#使用HtmlAgilityPack解析Html 爬取图片和视频
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 爬取图片和视频的更多相关文章
- python如何使用request爬取图片
下面是代码的简单实现,变量名和方法都是跑起来就行,没有整理,有需要的可以自己整理下: image2local: import requests import time from lxml import ...
- 爬取图片过程遇到的ValueError: Missing scheme in request url: h 报错与解决方法
一 .scrapy整体框架 1.1 scrapy框架图 1.2 scrapy框架各结构解析 item:保存抓取的内容 spider:定义抓取内容的规则,也是我们主要编辑的文件 pipelines:管道 ...
- python +requests 爬虫-爬取图片并进行下载到本地
因为写12306抢票脚本需要用到爬虫技术下载验证码并进行定位点击所以这章主要讲解,爬虫,从网页上爬取图片并进行下载到本地 爬虫实现方式: 1.首先选取你需要的抓取的URL:2.将这些URL放入待抓 ...
- HtmlAgilityPack解析全国区号页面到XML
需求:完成一个城市和区号的xml配置文件 处理思路:通过HtmlAgilityPack解析一个区号页面,生产xml文件 页面:http://www.hljboli.gov.cn/html/code.h ...
- Java jsoup爬取图片
jsoup爬取百度瀑布流图片 是的,Java也可以做网络爬虫,不仅可以爬静态网页的图片,也可以爬动态网页的图片,比如采用Ajax技术进行异步加载的百度瀑布流. 以前有写过用Java进行百度图片的抓取, ...
- [python爬虫] 爬取图片无法打开或已损坏的简单探讨
本文主要针对python使用urlretrieve或urlopen下载百度.搜狗.googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨.同时 ...
- scrapy爬虫,爬取图片
一.scrapy的安装: 本文基于Anacoda3, Anacoda2和3如何同时安装? 将Anacoda3安装在C:\ProgramData\Anaconda2\envs文件夹中即可. 如何用con ...
- scrapy爬虫系列之三--爬取图片保存到本地
功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...
- 孤荷凌寒自学python第八十二天学习爬取图片2
孤荷凌寒自学python第八十二天学习爬取图片2 (完整学习过程屏幕记录视频地址在文末) 今天在昨天基本尝试成功的基础上,继续完善了文字和图片的同时爬取并存放在word文档中. 一.我准备爬取一个有文 ...
- 孤荷凌寒自学python第八十一天学习爬取图片1
孤荷凌寒自学python第八十一天学习爬取图片1 (完整学习过程屏幕记录视频地址在文末) 通过前面十天的学习,我已经基本了解了通过requests模块来与网站服务器进行交互的方法,也知道了Beauti ...
随机推荐
- 一次线上OOM问题的个人复盘
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 上个月,我们一个java服务上线后,偶尔会发生内存OOM(Out Of Memory)问题,但由于OOM导致服务 ...
- python实现员工信息表
学习python时,看到的一个题目第一次写博客, 有误的地方还请大佬们指正,十分感谢~要求如下'''文件存储格式如下:id,name,age,phone,job(这行不需要写)1,alice,22,1 ...
- tidyr包几个函数的用法
在R语言中,tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转 ...
- Django之数据库操作入门
目录 pycharm连接mysql数据库 pycharm与数据库图形化交互方式 pycharm后台连接数据库 django连接数据库报错 ORM简介 ORM建表 ORM入门之增删改查 ORM写数据 O ...
- kubernetes核心实战(五)--- StatefulSets
7.StatefulSets StatefulSet 是用来管理有状态应用的工作负载 API 对象. StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod ...
- 用Abp实现双因素认证(Two-Factor Authentication, 2FA)登录(一):认证模块
@ 目录 原理 用户验证码校验模块 双因素认证模块 改写登录 在之前的博文 用Abp实现短信验证码免密登录(一):短信校验模块 一文中,我们实现了用户验证码校验模块,今天来拓展这个模块,使Abp用户系 ...
- Java对象内存管理
对象内存管理介绍 编译好的java程序需要运行在JVM中:JVM为java程序提供并管理所需要的内存空间:"栈"."堆"."方法区"三个区域 ...
- Java Heap
堆 堆是一种基于树的数据结构,是一种完全二叉树,堆中的所有的节点都按照特定的顺序排列. 在堆数据结构中,如果任意父节点的值都大于其子节点,则会产生一个大顶堆:反之,如果任意父节点的值都小于其子节点,则 ...
- SpringBoot线程池和Java线程池的实现原理
使用默认的线程池 方式一:通过@Async注解调用 public class AsyncTest { @Async public void async(String name) throws Inte ...
- VMware Workstation Pro许可证
永久许可证:ZC10K-8EF57-084QZ-VXYXE-ZF2XF 备用许可证: UF71K-2TW5J-M88QZ-8WMNT-WKUY4 AZ7MK-44Y1J-H819Z-WMYNC-N7A ...