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. Teamcenter_NX集成开发:通过NXOpen查询零组件是否存在

    之前用过NXOpen PDM的命名空间下的类,现在记录一下通过PDM命名空间下的类查询Teamcenter零组件的信息,也可以用来判断该零组件是否存在. 1-该工程为DLL工程,直接在NX界面调用,所 ...

  2. 如何用浏览器读取本地文件(兼容IE8),new bing能帮我吗?

    浏览器读写文件? 有一份老旧而精巧的代码(2006或更早),带js的html,可以只用浏览器来处理一些二进制存档数据. 文件的读写怎么办?通过变动的方法来完成. 利用十六进制编辑软件如WinHEX,直 ...

  3. 系统评价——层次分析法AHP的R语言实现(四)

    对一个事物的评价往往会涉及多个因素或者多个指标,评价是在多个因素相互作用下的一个综合判断.多指标综合评价方法具有以下的特点:包含若干个指标,分别说明被评价对象的不同方面,评价方法最终要对被评价对象作出 ...

  4. R语言文本数据挖掘(一)

    文本挖掘可以视为NLP(Natural language processing,自然语言处理)的一个子领域,目标是在大量非结构化文本中整理析取出有价值的内容.由于人类语言具有很高的复杂性,例如不同语言 ...

  5. 技术分享:Proxy-Pool代理池搭建IP代理

    技术分享:Proxy-Pool代理池搭建IP代理 前言本章内容仅供参考,不涉及实际使用,主要使用Python环境和Redis数据库进行环境搭建,工具网盘存储如下,有问题可以私聊我.网址:https:/ ...

  6. vue指令之事件指令

    目录 什么是事件指令 示例 什么是事件指令 事件指的是:点击事件,双击事件,划动事件,焦点事件... 语法 v-on:事件名='函数' # 注意:函数必须写在 methods配置项中 示例 # 点击按 ...

  7. 在线编写Markdown

    部署 editor.md 实现在线编写MD 安装Nginx服务 apt install nginx yum install nginx 修改Nginx配置 root@cby:~# vim /etc/n ...

  8. Windows下搭建java环境最新版本jdk运行jar文件

    1:安装JDK(Java Development Kit),链接https://www.oracle.com/java/technologies/downloads/#jdk18-windows下载最 ...

  9. 详解 APISIX Lua 动态调试插件 inspect

    作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者. 原文链接 为什么需要 Lua 动态调试插件? Apac ...

  10. MyQR--生成个性二维码

    1.二维码定义: 二维码(2-Dimensional Bar Code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的.它是指在一维条码的基础上扩展出另一 ...