久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

怎么使用Python進行多線程并發下載圖片

怎么使用Python下載大量圖像?下面本篇文章給大家介紹一下使用Python進行多線程并發下載圖片的方法,希望對大家有所幫助!

怎么使用Python進行多線程并發下載圖片

程序員必備接口測試調試工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api設計、調試、文檔、自動化測試工具
后端、前端、測試,同時在線協作,內容實時同步

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

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

讓我們構建一個簡單的圖像下載器腳本,它將讀取一個文本文件并以超快的速度下載一個文件夾中列出的所有圖像。

最終效果

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

怎么使用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 <= 5:     res = requests.get(img_url, stream=True)     print(f'Retry: {count} {img_url}')     count += 1
登錄后復制

在這里,我們重試下載圖像五次,以防失敗。現在,讓我們嘗試自動找到圖像的名稱并保存它。

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.fbcdn.net&_nc_cat=111

現在我們的第二部分找到一個 ?,然后只取它前面的任何東西。

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

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 <= 5:         res = requests.get(img_url, stream=True)         print(f'Retry: {count} {img_url}')         count += 1     # checking the type for image     if 'image' not in res.headers.get("content-type", ''):         print('ERROR: URL doesnot appear to be an image')         return False     # Trying to red image name from response headers     try:         image_name = str(img_url[(img_url.rfind('/')) + 1:])         if '?' in image_name:             image_name = image_name[:image_name.find('?')]     except:         image_name = str(random.randint(11111, 99999))+'.jpg'      i = Image.open(io.BytesIO(res.content))     download_location = 'cats'     i.save(download_location + '/'+image_name)     return f'Download complete: {img_url}'
登錄后復制

現在,你可能會問:「這個人所說的多處理在哪里?」。

這很簡單。我們將簡單地定義我們的池并將我們的函數和圖像 URL 傳遞給它。

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 filen$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 filen Example nn$python image_downloader.py dogs.txt nn')         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 <= 5:         res = requests.get(img_url, stream=True)         print(f'Retry: {count} {img_url}')         count += 1     # checking the type for image     if 'image' not in res.headers.get("content-type", ''):         print('ERROR: URL doesnot appear to be an image')         return False     # Trying to red image name from response headers     try:         image_name = str(img_url[(img_url.rfind('/')) + 1:])         if '?' in image_name:             image_name = image_name[:image_name.find('?')]     except:         image_name = str(random.randint(11111, 99999))+'.jpg'      i = Image.open(io.BytesIO(res.content))     download_location = get_download_location()     i.save(download_location + '/'+image_name)     return f'Download complete: {img_url}'  def run_downloader(process:int, images_url:list):     """     輸入項:         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)  try:     num_process = int(sys.argv[2]) except:     num_process = 10  images_url = get_urls() run_downloader(num_process, images_url)  end = time.time() print('Time taken to download {}'.format(len(get_urls()))) print(end - start)
登錄后復制

將其保存到 Python 文件中,然后運行它。

python3 image_downloader.py cats.txt
登錄后復制

這是 GitHub 存儲庫的鏈接。

用法

python3 image_downloader.py <filename_with_urls_seperated_by_newline.txt> <num_of_process>
登錄后復制

這將讀取文本文件中的所有 URL,并將它們下載到名稱與文件名相同的文件夾中。

num_of_process 是可選的(默認情況下,它使用 10 個進程)。

例子

python3 image_downloader.py cats.txt
登錄后復制

怎么使用Python進行多線程并發下載圖片

怎么使用Python進行多線程并發下載圖片

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

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产福利亚洲| 91精品国产调教在线观看| 久久久久九九精品影院| 欧美一级一区| 中文字幕一区二区三区日韩精品| 美女亚洲一区| 亚洲精品99| 日韩av不卡一区二区| 久久激情五月婷婷| 你懂的亚洲视频| 97精品国产一区二区三区| 中文字幕在线免费观看视频| 国产欧美日韩一区二区三区四区| 日韩av成人高清| 国产精品黑丝在线播放| 国产亚洲一级| 欧美日韩一区二区三区不卡视频 | 蜜臀精品一区二区三区在线观看 | 亚洲黄色影院| 亚洲日本在线观看视频| 国产亚洲一卡2卡3卡4卡新区| 美腿丝袜亚洲一区| 久久精选视频| 日韩精品a在线观看91| 亚洲一区二区三区免费在线观看 | 91精品韩国| 日韩在线电影| 国产精品红桃| 亚洲韩日在线| 国产欧美一区二区精品久久久| 黄毛片在线观看| 欧美亚洲国产精品久久| 亚洲制服一区| 久久毛片亚洲| 日本三级亚洲精品| 天堂中文av在线资源库| 亚洲aa在线| 亚洲成人精品| 久久av国产紧身裤| 欧洲激情综合| 久久男人av资源站| 国产香蕉精品| 视频一区中文字幕精品| 久久黄色影院| 久久av资源| 久久精品999| 日韩中文字幕不卡| 国产精成人品2018| 日韩欧美在线精品| 9国产精品视频| 美女网站视频一区| 国产精品国码视频| 国产亚洲精aa在线看 | 日本欧美不卡| 国产aⅴ精品一区二区四区| 日韩福利视频网| 在线看片日韩| 亚洲一区亚洲| 91精品二区| 久久99影视| 亚洲区国产区| 亚洲三级视频| 日韩av一二三| 欧美亚洲自偷自偷| 欧美精品中文字幕亚洲专区| 在线一区二区三区视频| 免费国产自线拍一欧美视频| 亚洲精品97| 一区二区国产在线观看| 亚洲在线久久| 国产福利资源一区| 91欧美日韩| 久久天堂成人| 尤物在线精品| 亚洲最新av| 日本aⅴ亚洲精品中文乱码| 日韩精品亚洲aⅴ在线影院| 国产日韩欧美三区| 国产一区福利| 黑丝一区二区三区| 日本精品国产| 日韩成人高清| 亚洲人成网77777色在线播放| 婷婷精品在线| 激情久久99| 日韩视频中文| 国产精品视频一区二区三区四蜜臂| 国产精品一国产精品k频道56| 精品视频网站| 夜夜精品视频| 日韩高清不卡一区二区| 精品国产一级| 欧美在线资源| 日韩精品午夜视频| 麻豆91在线播放| 伊人久久成人| 国产精品视频一区二区三区| 日韩伦理在线一区| 亚洲欧美在线综合| 岛国av在线播放| 亚洲激情欧美| 国产一区二区久久久久| 视频一区在线播放| 国产高潮在线| 欧美亚洲网站| 三上悠亚国产精品一区二区三区| 亚洲欧洲国产精品一区| 久久精品在线| 麻豆成人91精品二区三区| 久久福利精品| 亚洲va在线| 日韩国产欧美| 麻豆国产91在线播放| 视频一区日韩精品| 国产精品试看| 免费不卡中文字幕在线| 精品亚洲a∨一区二区三区18| 日本精品一区二区三区在线观看视频| 香蕉人人精品| 日韩欧美三级| 久久精品一区二区国产| 日韩精品一区二区三区免费视频| 91久久久精品国产| 999久久久精品国产| 亚洲永久av| 成人久久一区| 久久久国产亚洲精品| 国产伦久视频在线观看| sm久久捆绑调教精品一区| 国产成人77亚洲精品www| 美女视频一区在线观看| 国产精品久久久久久av公交车| 69堂免费精品视频在线播放| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩午夜av在线| 午夜在线视频观看日韩17c| 亚洲特级毛片| 在线日韩成人| 国产欧美日韩精品一区二区三区| 日韩1区2区3区| 国产精品久久乐| 国产精品精品| 狠狠干综合网| 日本不卡不码高清免费观看| 国产亚洲一区二区三区啪| 牛牛精品成人免费视频| 日韩在线观看| 视频一区视频二区中文| 视频一区日韩精品| 精品国产亚洲一区二区三区在线| 国产福利资源一区| 日韩精品一区二区三区免费观看| 免费视频一区三区| 日韩精品a在线观看91| 国际精品欧美精品| 精品一区欧美| 国产日韩在线观看视频| 国产综合色区在线观看| 视频在线观看一区二区三区| 国产乱码精品| 欧美/亚洲一区| 日韩一区二区三区精品| 亚洲最新av| 蜜桃成人精品| 日韩精品一区二区三区中文| 久久精品一区二区国产| 亚洲欧美日韩精品一区二区| 欧美日韩一区二区三区不卡视频 | 日韩一级不卡| 国产精品成人一区二区网站软件| 99成人超碰| 久久久久伊人| 亚洲三级毛片| 亚洲精品2区| 日本一区二区高清不卡| 日韩欧美高清一区二区三区| 久久精品影视| 日韩不卡一区| 久久精品亚洲一区二区| 婷婷精品在线| 一本一道久久a久久| 欧美日韩激情| 性欧美69xoxoxoxo| jiujiure精品视频播放| 欧美aⅴ一区二区三区视频| 五月激激激综合网色播| 日韩中文字幕91| 国产农村妇女精品一二区| 欧美~级网站不卡| 蜜桃国内精品久久久久软件9| 水蜜桃久久夜色精品一区| 国产极品嫩模在线观看91精品| 日韩精品一区二区三区免费观影 | 免费中文字幕日韩欧美| 91青青国产在线观看精品| 麻豆精品在线| 麻豆国产精品| 色欧美自拍视频| 精品欧美一区二区三区在线观看| 国产白浆在线免费观看|