国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python實(shí)現(xiàn)批量圖片下載及去重處理

這篇具有很好參考價值的文章主要介紹了Python實(shí)現(xiàn)批量圖片下載及去重處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景

在爬蟲應(yīng)用開發(fā)中,常常需要批量下載圖片,并對圖片進(jìn)行去重處理。Python 是一種非常流行的編程語言,也是開發(fā)爬蟲應(yīng)用的首選,本文將介紹如何使用 Python 下載圖片,并對下載的圖片進(jìn)行去重處理。

內(nèi)容

首先,我們需要使用 Python 中的 Requests 庫來下載圖片,并使用 OS 庫來創(chuàng)建保存圖片的文件夾。下載圖片后,我們可以使用 hashlib 庫對圖片的內(nèi)容做哈希處理,并將處理后的哈希值作為圖片的唯一識別標(biāo)志,以便進(jìn)行去重處理。在對圖片進(jìn)行去重處理時,我們需要將下載的圖片與已有的圖片進(jìn)行比對,可以使用字典或集合等數(shù)據(jù)結(jié)構(gòu)來存儲已有圖片的哈希值,以便查找和比對。在所有的圖片下載完成后,我們可以將下載的圖片的文件名或哈希值保存到本地文本文件中,以備后續(xù)查看或處理。
Python實(shí)現(xiàn)批量圖片下載及去重處理
Python實(shí)現(xiàn)批量圖片下載及去重處理

一些好看的動漫api接口:https://blog.csdn.net/likepoems/article/details/123924270

https://img.r10086.com/

代碼

1、爬取圖片代碼

# -*- coding: utf-8 -*-
# @Time    : 2023/3/30 13:56
# @Author  : 南宮乘風(fēng)
# @Email   : 1794748404@qq.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/123924270

def download_images(dir_path, file_prefix, num_images):
    """
    循環(huán)訪問接口并保存圖片到指定目錄
    dir_path:圖片保存的目錄
    file_prefix:保存的文件名前綴
    num_images:需要下載的圖片數(shù)量
    """
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)
    # 設(shè)置請求頭
    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', headers=headers)
        if response.status_code == 200:
            # 構(gòu)造文件名
            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'獲取圖片失敗,狀態(tài)碼:{response.status_code}')

        sleep(1)


# 示例
if __name__ == '__main__':
    dir_path = 'dongman'
    file_prefix = 'image'
    num_images = 1000
    download_images(dir_path, file_prefix, num_images)

2、圖片去重

原理:MD5 是一種常用的哈希算法,它可以將任意長度的輸入(比如一個字符串或者一個文件)轉(zhuǎn)換成一個 128 比特長度的輸出,輸出值通常表示為一個 32 位的十六進(jìn)制數(shù)字串。而對于任意輸入的變化,其產(chǎn)生的輸出也會有所不同,因此可以將 MD5 值作為唯一的識別標(biāo)志來去重。在 Python 中,我們可以使用 hashlib 庫中的 md5 函數(shù)來生成 MD5 值。

流程:其具體實(shí)現(xiàn)流程如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-416565.html

  1. 導(dǎo)入 hashlib 庫。
  2. 定義與圖片相關(guān)的 path、filename 和 filesize 等變量,使用 os.path 庫中的函數(shù)處理路徑和文件名。
  3. 對圖片的二進(jìn)制數(shù)據(jù)使用 hashlib.md5() 生成 MD5 值。
  4. 將生成的 MD5 值轉(zhuǎn)換為字符串格式,去除無用字符。
  5. 使用集合或字典等數(shù)據(jù)結(jié)構(gòu)存儲已有圖片的 MD5 值,在遍歷待下載的圖片時,判斷其對應(yīng)的 MD5 值是否已經(jīng)存在于集合或字典中,若存在則說明圖片已下載過,不再重復(fù)下載;否則可以將該圖片下載下來,并將其對應(yīng)的 MD5 值加入到已有圖片集合中。
  6. 下載圖片后,將其文件名或 MD5 值存儲到本地文本文件中,便于后續(xù)查看或處理。
    上述流程基本描述了使用 MD5 值去重的具體實(shí)現(xiàn)過程,其中還需結(jié)合具體應(yīng)用場景進(jìn)行優(yōu)化和改進(jìn)。
import os
import shutil
import hashlib


def get_md5(file):
    """計(jì)算文件的MD5值"""
    if not os.path.isfile(file):
        return None
    with open(file, 'rb') as f:
        md5 = hashlib.md5()
        md5.update(f.read())
        return md5.hexdigest()


def find_duplicate_images(dir_path):
    """查找重復(fù)圖片"""
    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))
    # 對于每個圖片,計(jì)算它的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值列表中是否有重復(fù)的值,如果有,則說明該圖片是重復(fù)圖片,將其路徑保存到一個刪除列表中
    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])
    # 遍歷刪除列表,將其中的圖片移動到目標(biāo)目錄中
    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('已移動重復(fù)文件:', image)
        except Exception as e:
            print('移動失?。?s,錯誤:%s' % (image, str(e)))
    print('重復(fù)圖片搜索完成,共找到%d個重復(fù)文件!' % len(delete_list))


# 示例
if __name__ == '__main__':
    # 需要移動重復(fù)圖片的目標(biāo)目錄
    # target_dir設(shè)置全局變量
    global target_dir
    target_dir = 'repeat_image'
    dir_path = 'dongman'
    find_duplicate_images(dir_path)

到了這里,關(guān)于Python實(shí)現(xiàn)批量圖片下載及去重處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java批量下載書籍圖片并保存為PDF的方法

    因?yàn)榻?jīng)常出差火車上沒網(wǎng)、不方便電子書閱讀器批注,需要從某網(wǎng)站上批量下載多本書籍的圖片并自動打包成PDF文件。 1、嘗試獲得圖片地址,發(fā)現(xiàn)F12被禁 解決方法:使用Chrome瀏覽器,點(diǎn)擊右上角三個點(diǎn)呼出菜單,選擇“更多工具”-“開發(fā)者工具” 或者使用Ctrl+Shift+C、Ctrl

    2024年02月13日
    瀏覽(20)
  • 《Stable Diffusion WebUI折騰實(shí)錄》在Windows完成安裝, 從社區(qū)下載熱門模型,批量生成小姐姐圖片

    《Stable Diffusion WebUI折騰實(shí)錄》在Windows完成安裝, 從社區(qū)下載熱門模型,批量生成小姐姐圖片

    操作系統(tǒng): Windows11 顯卡: RTX2060 6GB 顯存 下載 Python3.10.6 安裝 注意勾選 Add Python 3.10.6 to PATH ,然后一路 下一步 即可 打開powershell, 確認(rèn)安裝成功 下載git 完成安裝 為了避免找不到開源項(xiàng)目,可以像上圖中的我一樣, 先在用戶目錄建立一個github文件夾,進(jìn)入文件夾后,再下載開源

    2024年02月11日
    瀏覽(48)
  • Python Selenium如何下載網(wǎng)頁中的圖片到本地?(Base64編碼的圖片下載)

    Python Selenium如何下載網(wǎng)頁中的圖片到本地?(Base64編碼的圖片下載)

    前言:? ? ? ?? ? ? ? ? 在網(wǎng)頁上,圖片有時會以Base64編碼的形式嵌入在HTML中,而不是作為單獨(dú)的文件提供。這種方式的優(yōu)點(diǎn)是可以減少HTTP請求的數(shù)量,因?yàn)閳D片數(shù)據(jù)直接包含在HTML中,不需要額外的請求來獲取圖片文件。這對于小圖片或圖標(biāo)特別有用,因?yàn)檫@些圖片的文

    2024年04月17日
    瀏覽(32)
  • Python 爬蟲網(wǎng)頁圖片下載到本地

    您可以使用Python的requests庫來獲取網(wǎng)頁的源碼,使用BeautifulSoup庫來解析HTML,并使用urllib庫來下載圖片到本地。下面是一個示例代碼: 請注意,上述代碼中的URL和文件名是示例,您需要根據(jù)實(shí)際情況進(jìn)行替換。另外,這段代碼只能下載圖片類型為JPEG的文件,如果想要下載其他

    2024年02月11日
    瀏覽(95)
  • 織夢dedecms不能下載遠(yuǎn)程圖片實(shí)現(xiàn)圖片本地化解決方法

    DEDE圖片本地化失效的主要原因: 服務(wù)器上的運(yùn)行環(huán)境中禁用了fsockopen()函數(shù) 解決方案一: 在用fsockopen()的地方用stream_socket_client()函數(shù)代替。 具體修改地方是 /include/dedehttpdown.class.php 第507行 $this-m_fp = @fsockopen($this-m_host, $this-m_port, $errno, $errstr,10); 替換為 $this-m_fp = @stream_socke

    2023年04月24日
    瀏覽(21)
  • 軟件測試|教你使用Python下載圖片

    軟件測試|教你使用Python下載圖片

    前言 我一直覺得Windows系統(tǒng)默認(rèn)的桌面背景不好看,但是自己又沒有好的資源可以進(jìn)行替換,突然我一個朋友提醒了我,網(wǎng)絡(luò)上的圖片這么多,你甚至可以每天換很多個好看的背景,但是如果讓我手動去設(shè)置的話,我覺得太麻煩了,我不如使用技術(shù)手段將圖片下載到本地,并

    2024年02月01日
    瀏覽(23)
  • 微信小程序?qū)崿F(xiàn)圖片下載與保存功能

    首先,定義了一個全局的定時器變量 timer 。 在 downloadImage 函數(shù)中,如果 timer 已經(jīng)存在,就清除它,以確保每次只有一個下載任務(wù)在進(jìn)行。 然后,設(shè)置一個新的定時器,延遲1秒后開始執(zhí)行下載任務(wù)。這是為了防止頻繁觸發(fā)下載操作。 在定時器的回調(diào)函數(shù)中,首先顯示一個加

    2024年02月03日
    瀏覽(51)
  • Python:使用requests庫下載圖片(含完整源碼)

    Python:使用requests庫下載圖片(含完整源碼) 在這篇文章中,我將介紹如何使用Python的requests庫實(shí)現(xiàn)下載圖片的功能,并提供完整的源代碼。 首先,我們需要安裝requests庫??梢允褂靡韵旅钤诮K端或命令行中安裝它: 接下來,我們需要導(dǎo)入requests庫和os庫,os庫主要是用于創(chuàng)

    2024年02月13日
    瀏覽(17)
  • VSCode Webview中如何實(shí)現(xiàn)點(diǎn)擊下載圖片

    眾所周知,在一個普通的HTML頁面中,如果要實(shí)現(xiàn)一個鏈接點(diǎn)擊后下載圖片,只需要在頁面上放一個a標(biāo)簽,然后將屬性href的值指向圖片的URL或者Base64字符串就可以了?;蛘甙凑誷tackoverflow上提供的方法動態(tài)創(chuàng)建a標(biāo)簽來完成圖片的下載動作。不過原理都是相同的。 但是這個方法

    2023年04月26日
    瀏覽(27)
  • java fastdfs實(shí)現(xiàn)文件(圖片)的上傳下載

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包