CodePlus | C# 网页所有图片批量下载

news2024/11/17 1:39:55

C# 网页所有图片批量下载

文章目录

  • C# 网页所有图片批量下载
    • 前言
    • 演示效果
    • 操作步骤
      • 第一步:安装CodePlus扩展库
      • 第二步:提取链接程序
      • 第三步:取网页源码
      • 第四步:设置前后缀
      • 第五步:执行下载
    • 更多演示
    • 结束语

前言

今天想着换一个头像,但是一时不知道去哪儿找图比较好。翻一翻手机的相册,里面一片鸟语花香,像是老年人的相册,实在是没有勇气将自己的头像换成荷花儿。于是就开始琢磨去哪里能找到别人精挑细选的头像,懒得自己做饭了,就吃点儿现成的吧。
找到了一个音频直播的平台,里面全部都是照骗(毕竟是音频直播。你懂的)。随便翻翻大堆酷guy头像,那我就不客气了。
我打算通过关键字截取的方式提取网页源码中的所有图片链接,即:通过图片链接前后的关键字作为匹配的特征,将网页源码文本中的特定字符串批量提取出来。

演示效果

这是原始网页截图:
在这里插入图片描述
这是运行程序和文件夹的截图:
在这里插入图片描述

操作步骤

第一步:安装CodePlus扩展库

安装方法请参考文章:C# 创建N个线程同时批量下载文件

第二步:提取链接程序

在这里插入图片描述
在这里插入图片描述

// 源文本内容通过前缀字符串和后缀字符串的匹配,提取所有中间部分文本
var result = tbSource.Text.MatchByPrefixAndSuffix(tbPrefix.Text, tbSuffix.Text);

// 将所有匹配结果按行显示在文本框中
tbSource.Lines = result.ToArray();

第三步:取网页源码

在网页上按F12调出开发者工具箱,找到排列图片的容器:
在这里插入图片描述
全部复制出来:
在这里插入图片描述

第四步:设置前后缀

找到一条图片标签,看一下格式:

<img src="//p4.music.126.net/59lauaa0dBZHKPCWgnv1ag==/109951168181660252.jpg?imageView=1&amp;type=webp&amp;thumbnail=80y80" class="img_Bh8DM" loading="lazy">

其中,<img src="//可以作为前缀。?imageView=之后跟的是尺寸参数,我们需要原图,所以可以直接作为后缀。

填入参数并截取:
在这里插入图片描述
这样所有的图片链接就得到啦!

第五步:执行下载

下载程序依然参考文章:C# 创建N个线程同时批量下载文件

因为截取的链接前没有https,另外为了下载不重复于是对DownloadHandler方法稍作修改:

        /// <summary>
        /// 每个组的链接下载处理过程
        /// </summary>
        /// <param name="urlGroup"></param>
        private void DownloadHandler(IEnumerable<string> urlGroup)
        {
            // 创建WebClient
            WebClient client = new WebClient();

            // 遍历Url
            foreach (string url in urlGroup)
            {
                // 从链接中获取文件名
                var fileName = Path.GetFileName(url);

                // 文件保存路径
                var savePath = Path.Combine(tbSavePath.Text, fileName);

                // 如果已存在同名文件则跳过此下载项
                if (File.Exists(savePath))
                {
                    continue;
                }

                // 下载文件到指定目录
                client.DownloadFile("https://" + url, savePath);
            }
        }

到此,网站上的图片全都收入囊中了。
在这里插入图片描述

更多演示

同样的方法,BiliBili主页的图片也可以下载哦:
在这里插入图片描述
设置前后缀的关键字:
在这里插入图片描述
批量下载:
在这里插入图片描述

结束语

CodePlus扩展库中包含许多便捷开发的扩展方法,能极大程度上简化基础开发,欢迎体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CANoe-添加自定义示例工程

CANoe自带的示例工程我们讲过很多次了。当安装CANoe软件时,会在安装界面让用户选择是否安装Sample Configurations。如果勾选了,则会在电脑的的C盘自带需要的示例工程,路径为:C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 15.3.89 当然你也可以在CANoe软…

Netty 之 DefaultPromise 源码解析

在解析Netty源码时&#xff0c;在解析NioEventLoop 创建过程中&#xff0c;有一段这样的代码。 protected MultithreadEventExecutorGroup(int nThreads, Executor executor,EventExecutorChooserFactory chooserFactory, Object... args) {if (nThreads < 0) {throw new I…

Java深拷贝和浅拷贝Map对象

目录1 将Map深拷贝到另一个Map对象当中2 浅拷贝Map1 将Map深拷贝到另一个Map对象当中 今天赋值的时候遇到的小坑 相关文章推荐&#xff1a; Java克隆方式避免频繁创建对象优化方案 https://blog.csdn.net/ZGL_cyy/article/details/126556907 1.需求说明 将一个MapA对象中所…

Fork之前创建了互斥锁,要警惕死锁问题

文章目录Fork之前创建了互斥锁&#xff0c;要警惕死锁问题使用GDB进行调试如何解决该问题&#xff1f;是否还有别的问题&#xff1f;结论参考文献Fork之前创建了互斥锁&#xff0c;要警惕死锁问题 下面的这段代码会导致子进程出现死锁问题&#xff0c;您看出来了吗&#xff1f…

【MFC】使用MFC框架(10)

MFC不仅仅是一个类库&#xff0c;而且是一个所谓的“设计框架”&#xff0c;注入了很多开发理念和设计思想。类库与框架的区别可以理解为“食材”与“火锅”套餐的区别——火锅套餐已经标明了开发者必须接受已定的一些规则&#xff0c;包括“Message Mapping消息映射机制”、“…

忽略语法细节,从整体上理解函数

从整体上看&#xff0c;C语言代码是由一个一个的函数构成的&#xff0c;除了定义和说明类的语句&#xff08;例如变量定义、宏定义、类型定义等&#xff09;可以放在函数外面&#xff0c;所有具有运算或逻辑处理能力的语句&#xff08;例如加减乘除、if else、for、函数调用等&…

配置中心-开源系统对比分析

一、为什么需要配置中心 1、配置实时生效 传统的静态配置方式要想修改某个配置只能修改之后重新发布应用&#xff0c;要实现动态性&#xff0c;可以选择使用数据库&#xff0c;通过定时轮询访问数据库来感知配置的变化。轮询频率低感知配置变化的延时就长&#xff0c;轮询频率…

运放电路中电容的作用-运算放大器

在运放电路中&#xff0c;大家可能会经常看到这么几个电容&#xff0c;分别是&#xff1a; 1、电源VCC到地 2、反馈输入输出引脚之间 3、正负两输入端之间的电容 就算不要这几个电容&#xff0c;电路好像也能工作&#xff0c;但电路设计一般都会加上&#xff0c;那么这几个电…

软件无线电之数字下变频(Matlab实例)

软件无线电之数字下变频 1 原理 在通信系统中&#xff0c;为了易于信号发射以及实现信道复用&#xff0c;传输的信号发射频率一般很高。 在接收机中&#xff0c;为了降低信号的载波频率或是直接去除载波频率得到基带信号&#xff0c;通常将接收信号与本地振荡器产生的本振信…

Java循环综合案例

文章目录Java循环综合案例案例一&#xff1a;逢 7 跳过案例二&#xff1a;数组元素求和案例三&#xff1a;判断两个数组是否相同案例四&#xff1a;查找元素在数组中的索引案例五&#xff1a;数组元素反转案例六&#xff1a;评委打分案例七&#xff1a;随机产生验证码Java循环综…

那些年我们拿下了 Zynq

小菜鸟的 Zynq 学习经验分享~ 资料来源&#xff1a;黑金 Zynq7035 开发板配套资料&#xff0c;完全适合于 Zynq 学习。 获取方式&#xff1a;【51爱电子】回复【Zynq7000】即可获取资料链接&#xff01;本资料仅供学习使用&#xff0c;切勿商用。 另外四个是关于 Altera FPGA…

跨域和cookie

本文以前端的视角来探讨浏览器的跨域和cookie问题。 一、跨域 跨域简介&#xff1a; 为什么会出现跨域&#xff1f; 出于浏览器的同源策略限制&#xff0c;浏览器会拒绝跨域请求。 什么情况下出现跨域&#xff1f; 不同源就会跨域。同源即&#xff1a;协议、域名、端口号…

图文详解:箭头函数与常规函数的this指向问题

函数中this的指向问题特别容易让人迷糊&#xff0c;这里用示例来指点迷津&#xff0c;走出迷茫。 常规函数下的this指向 1. 纯粹的函数调用 function test(name) { console.log(name) console.log(this) } test(zjcopy) ; test.call(zjcopy, cuclife-2) ; test.call(fal…

pytesseract 安装错误总结

项目场景&#xff1a; 使用eclipse调用pytesseract接口&#xff0c;进行OCR识别。 在anaconda的python3.6.4版本&#xff0c;安装配置pytesseract 问题描述 pip install pytesseract 报错 错误提醒&#xff1a;pytesseract requires Python >3.7 but the running Python…

【数据结构】顺序栈的原理及实现

【数据结构】顺序栈的原理及实现 1.什么是栈 栈它是一种先进后出的有序列表数据结构。栈是线性表里的元素插入和删除只能在该线性表的同一端进行的一种特殊线性表。该线性表的插入和删除都叫栈顶&#xff0c;也就是变化的一端。另一端是固定不变的成为栈底。根据下图可以看出…

《高性能MySQL》——架构与历史(笔记)

文章目录一、MySQL架构与历史1.1.1 连接管理与安全性1.1.2 优化与执行1.2 并发控制1.2.1 读写锁1.2.2 锁粒度&#xff08;锁模式&#xff09;表锁(table lock)行级锁(row lock)1.3 事务1.3.1 隔离级别READ UNCOMITTED (读未提交)READ COMMITTED (读提交)REPEATABLE READ (可重复…

初识C++(学习计划)

前言 基于对C语言的学习&#xff0c;我将进一步学习C的相关知识。 我们在使用C语言时创建的是.c文件&#xff0c;使用C使用的是.cpp文件&#xff0c;其中p——plus&#xff08;加&#xff0c;的意思&#xff09;&#xff0c;所以cpp就是c。 C是为了解决一些C语言不能解决的问题…

SpringBatch使用(一)

一、SpringBatch简介 1、Spring Batch是一个轻量级&#xff0c;全面的批处理框架&#xff0c;旨在开发对企业系统日常运营至关重要的强大批处理应用程序。Spring Batch构建了人们期望的Spring Framework特性&#xff08;生产力&#xff0c;基于POJO的开发方法和一般易用性&…

docker安装elasticsearch kibana 8.6.0(设置密码+汉化+ik分词器)

安装eskibana安装:拉取镜像并安装设置密码汉化配置ik分词器安装: 记得开放使用的端口,或者关闭防火墙 提示:需要提升虚拟机或者服务器的内存到8G以上 拉取镜像并安装 docker pull elasticsearch:8.6.0 docker pull kibana:8.6.0docker network create es-netdocker run -it…

Itext7在PDF指定位置添加电子公章

目录 1. 电子公章的制作 2. java工具keytool生成p12数字证书文件 3. pom依赖 4. 实体类 5. 工具类及测试示例 6. 效果 1. 电子公章的制作 做章网站&#xff1a;http://seal.biaozhiku.com/ 我们选择圆形印章 然后输入公司名&#xff0c;输入章名输入编码然后点击395生成&…