搜尋
首頁後端開發Python教學Python怎麼多線程並發下載圖片

Python怎麼多線程並發下載圖片

有時候,下載大量圖像需要幾個小時——讓我們來解決這個問題

我明白了——你已經厭倦了等待你的程式下載圖像。有時我必須下載數千張圖像需要幾個小時,而且你不可能一直等待你的程式完成下載這些愚蠢的圖像。你有很多重要的事情要做。

讓我們建立一個簡單的圖像下載器腳本,它將讀取一個文字檔案並以超快的速度下載一個資料夾中列出的所有圖像。

最終效果

這就是我們最終要建立的效果。

image downloader python

Python怎麼多線程並發下載圖片怎麼多線程並發下載圖片

安裝依賴項

讓我們可以安裝每個人最喜歡的 requests 函式庫。

pip install requests

現在,我們將看到一些用於下載單一 URL 並嘗試自動尋找圖像名稱以及如何使用重試的基本程式碼。

import requests

res = requests.get(img_url, stream=True)
count = 1
while res.status_code != 200 and count <p>在這裡,我們重試下載圖片五次,以防失敗。現在,讓我們嘗試自動找到圖像的名稱並保存它。 </p><pre class="brush:php;toolbar:false">import more required library

import io
from PIL import Image

# lets try to find the image name
image_name = str(img_url[(img_url.rfind('/')) + 1:])
if '?' in image_name:
    image_name = image_name[:image_name.find('?')]

解釋

假設我們要下載的URL 是:

instagram.fktm7-1.fna.fbcdn.net/vp ....

好吧,這是一團糟。讓我們分解一下程式碼對 URL 的作用。我們首先使用 rfind 找到最後一個正斜線(/),然後選擇之後的所有內容。這是結果:

65872070_1200425330158967_6201268309743367902_n.jpg?_nc_ht=instagram.fktm7–1.fna.ccdn.net&_fb_nc_ht#cnc_cat_catc1#.fna.ccdn.net&_fb_cat_1111 月的第二個部分找到我們的第二個部分。 ##?,然後只取它前面的任何東西。

這是我們最終的映像名稱:

65872070_1200425330158967_6201268309743367902_n.jpg

這個結果非常好,適用於大多數用例。 現在我們已經下載了圖片名稱和映像,我們將保存它。

i = Image.open(io.BytesIO(res.content))
i.save(image_name)

如果你在想,「我到底該怎麼使用上面的程式碼?」那麼你的想法是正確的。這是一個漂亮的函數,我們在上面所做的一切都被扁平處理了。在這裡,我們還測試了下載的類型是否為圖像,以防找不到圖像名稱。

def image_downloader(img_url: str):
    """
    Input:
    param: img_url  str (Image url)
    Tries to download the image url and use name provided in headers. Else it randomly picks a name
    """
    print(f'Downloading: {img_url}')
    res = requests.get(img_url, stream=True)
    count = 1
    while res.status_code != 200 and count <p>現在,你可能會問:「這個人所說的多處理在哪裡?」。 </p><p>這很簡單。我們將簡單地定義我們的池並將我們的函數和圖像 URL 傳遞給它。 </p><pre class="brush:php;toolbar:false">results = ThreadPool(process).imap_unordered(image_downloader, images_url)
for r in results:
    print(r)

讓我們把它放在一個函數中:

def run_downloader(process:int, images_url:list):
    """
    Inputs:
        process: (int) number of process to run
        images_url:(list) list of images url
    """
    print(f'MESSAGE: Running {process} process')
    results = ThreadPool(process).imap_unordered(image_downloader, images_url)
    for r in results:
        print(r)

再一次,你可能會說,「這一切都很好,但我想立即開始下載我的1000 張圖像清單。我不想複製和貼上所有這些程式碼並試圖弄清楚如何合併所有內容。」

這是一個完整的腳本。它執行以下操作:

以圖像清單文字檔案和進程編號作為輸入

  • 按照您想要的速度下載它們

  • 列印下載檔案的總時間

  • 還有一些不錯的函數可以幫助我們讀取檔案名稱並處理錯誤和其他東西

  • 完整的腳本
# -*- coding: utf-8 -*-
import io
import random
import shutil
import sys
from multiprocessing.pool import ThreadPool
import pathlib

import requests
from PIL import Image
import time

start = time.time()

def get_download_location():
    try:
        url_input = sys.argv[1]
    except IndexError:
        print('ERROR: Please provide the txt file\n$python image_downloader.py cats.txt')
    name = url_input.split('.')[0]
    pathlib.Path(name).mkdir(parents=True, exist_ok=True)
    return name

def get_urls():
    """
    通过读取终端中作为参数提供的 txt 文件返回 url 列表
    """
    try:
        url_input = sys.argv[1]
    except IndexError:
        print('ERROR: Please provide the txt file\n Example \n\n$python image_downloader.py dogs.txt \n\n')
        sys.exit()
    with open(url_input, 'r') as f:
        images_url = f.read().splitlines()

    print('{} Images detected'.format(len(images_url)))
    return images_url

def image_downloader(img_url: str):
    """
    输入选项:
    参数: img_url  str (Image url)
    尝试下载图像 url 并使用标题中提供的名称。否则它会随机选择一个名字
    """
    print(f'Downloading: {img_url}')
    res = requests.get(img_url, stream=True)
    count = 1
    while res.status_code != 200 and count <h2 id="將其儲存到Python怎麼多線程並發下載圖片怎麼多線程並發下載圖片-檔案中-然後執行它-strong-pre-python-image-downloader-py-cats-txt-pre-strong-這是-GitHub-儲存庫的連結">將其儲存到Python怎麼多線程並發下載圖片怎麼多線程並發下載圖片 檔案中,然後執行它。 <strong><pre class="brush:php;toolbar:false">python3 image_downloader.py cats.txt
這是 GitHub 儲存庫的連結。

用法

python3 image_downloader.py <filename_with_urls_seperated_by_newline.txt> <num_of_process></num_of_process></filename_with_urls_seperated_by_newline.txt>

這將讀取文字檔案中的所有 URL,並將它們下載到名稱與檔案名稱相同的資料夾中。

num_of_process

是可選的(預設情況下,它使用 10 個進程)。

範例

python3 image_downloader.py cats.txt

image downloader python

#我很樂意就如何進一步改進這一點做出任何回應。

Python怎麼多線程並發下載圖片怎麼多線程並發下載圖片

英文原文網址:https://betterprogramming.pub/building-an-imagedownloader-with-multiprocessing-in-python-44aee36e0424

#【相關推薦:

#Python怎麼多線程並發下載圖片怎麼多線程並發下載圖片3影片教學

以上是Python怎麼多線程並發下載圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
Python:遊戲,Guis等Python:遊戲,Guis等Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python vs.C:申請和用例Python vs.C:申請和用例Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時的Python計劃:一種現實的方法2小時的Python計劃:一種現實的方法Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:探索其主要應用程序Python:探索其主要應用程序Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

您可以在2小時內學到多少python?您可以在2小時內學到多少python?Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到?如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到?Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python 3.6加載Pickle文件報錯"__builtin__"模塊未找到怎麼辦?Python 3.6加載Pickle文件報錯"__builtin__"模塊未找到怎麼辦?Apr 02, 2025 am 07:12 AM

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器