网站建设技术支持方案,停止wordpress,源码怎么做成app软件手机版,陕西省建设协会岗位证查询网站背景
在爬虫应用开发中#xff0c;常常需要批量下载图片#xff0c;并对图片进行去重处理。Python 是一种非常流行的编程语言#xff0c;也是开发爬虫应用的首选#xff0c;本文将介绍如何使用 Python 下载图片#xff0c;并对下载的图片进行去重处理。
内容
首先…背景
在爬虫应用开发中常常需要批量下载图片并对图片进行去重处理。Python 是一种非常流行的编程语言也是开发爬虫应用的首选本文将介绍如何使用 Python 下载图片并对下载的图片进行去重处理。
内容
首先我们需要使用 Python 中的 Requests 库来下载图片并使用 OS 库来创建保存图片的文件夹。下载图片后我们可以使用 hashlib 库对图片的内容做哈希处理并将处理后的哈希值作为图片的唯一识别标志以便进行去重处理。在对图片进行去重处理时我们需要将下载的图片与已有的图片进行比对可以使用字典或集合等数据结构来存储已有图片的哈希值以便查找和比对。在所有的图片下载完成后我们可以将下载的图片的文件名或哈希值保存到本地文本文件中以备后续查看或处理。
一些好看的动漫api接口https://blog.csdn.net/likepoems/article/details/123924270
https://img.r10086.com/
代码
1、爬取图片代码
# -*- coding: utf-8 -*-
# Time : 2023/3/30 13:56
# Author : 南宫乘风
# Email : 1794748404qq.com
# File : main.py
# Software: PyCharm
import os
import requests
from time import sleep# https://img.r10086.com/
# https://blog.csdn.net/likepoems/article/details/123924270def download_images(dir_path, file_prefix, num_images):循环访问接口并保存图片到指定目录dir_path图片保存的目录file_prefix保存的文件名前缀num_images需要下载的图片数量if not os.path.exists(dir_path):os.makedirs(dir_path)# 设置请求头headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 }for i in range(num_images):response requests.get(https://api.r10086.com/img-api.php?type原神横屏系列1, headersheaders)if response.status_code 200:# 构造文件名file_name os.path.join(dir_path, f{file_prefix}_{i}.jpg)# 保存图片到本地文件with open(file_name, wb) as f:f.write(response.content)print(file_name 下载完成)else:print(f获取图片失败状态码{response.status_code})sleep(1)# 示例
if __name__ __main__:dir_path dongmanfile_prefix imagenum_images 1000download_images(dir_path, file_prefix, num_images)2、图片去重
原理MD5 是一种常用的哈希算法它可以将任意长度的输入比如一个字符串或者一个文件转换成一个 128 比特长度的输出输出值通常表示为一个 32 位的十六进制数字串。而对于任意输入的变化其产生的输出也会有所不同因此可以将 MD5 值作为唯一的识别标志来去重。在 Python 中我们可以使用 hashlib 库中的 md5 函数来生成 MD5 值。
流程其具体实现流程如下
导入 hashlib 库。定义与图片相关的 path、filename 和 filesize 等变量使用 os.path 库中的函数处理路径和文件名。对图片的二进制数据使用 hashlib.md5() 生成 MD5 值。将生成的 MD5 值转换为字符串格式去除无用字符。使用集合或字典等数据结构存储已有图片的 MD5 值在遍历待下载的图片时判断其对应的 MD5 值是否已经存在于集合或字典中若存在则说明图片已下载过不再重复下载否则可以将该图片下载下来并将其对应的 MD5 值加入到已有图片集合中。下载图片后将其文件名或 MD5 值存储到本地文本文件中便于后续查看或处理。 上述流程基本描述了使用 MD5 值去重的具体实现过程其中还需结合具体应用场景进行优化和改进。
import os
import shutil
import hashlibdef get_md5(file):计算文件的MD5值if not os.path.isfile(file):return Nonewith open(file, rb) as f:md5 hashlib.md5()md5.update(f.read())return md5.hexdigest()def find_duplicate_images(dir_path):查找重复图片all_images []md5_list []delete_list []# 遍历整个目录将所有图片的路径保存到一个列表中for root, dirs, files in os.walk(dir_path):for file in files:if file.endswith(.jpg) or file.endswith(.png):all_images.append(os.path.join(root, file))# 对于每个图片计算它的MD5值并将MD5值和路径保存到两个列表中for image in all_images:md5 get_md5(image)if md5 is not None:md5_list.append(md5)else:delete_list.append(image)# 判断MD5值列表中是否有重复的值如果有则说明该图片是重复图片将其路径保存到一个删除列表中for i in range(len(md5_list)):for j in range(i 1, len(md5_list)):if md5_list[i] md5_list[j]:delete_list.append(all_images[j])# 遍历删除列表将其中的图片移动到目标目录中if not os.path.exists(target_dir):os.makedirs(target_dir)for image in delete_list:try:shutil.move(image, os.path.join(target_dir, os.path.basename(image)))print(已移动重复文件, image)except Exception as e:print(移动失败%s错误%s % (image, str(e)))print(重复图片搜索完成共找到%d个重复文件 % len(delete_list))# 示例
if __name__ __main__:# 需要移动重复图片的目标目录# target_dir设置全局变量global target_dirtarget_dir repeat_imagedir_path dongmanfind_duplicate_images(dir_path)