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&type=webp&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扩展库中包含许多便捷开发的扩展方法,能极大程度上简化基础开发,欢迎体验。