最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python批量下載圖片的實現(xiàn)步驟

 更新時間:2025年10月04日 08:36:31   作者:detayun  
在我們?nèi)粘I钪?有時候進入一個網(wǎng)站后,發(fā)現(xiàn)大量的圖片,比如說一些好看的素材,以及我以前非常喜歡看的風景圖片,想要下載下來怎么辦?難道我一張張去復(fù)制?這有點不現(xiàn)實,所以本文給大家介紹了Python批量下載圖片的實現(xiàn)步驟,需要的朋友可以參考下

在Python中批量下載圖片可以通過以下步驟實現(xiàn),這里提供一個完整的代碼示例:

基礎(chǔ)方案:使用requests庫

import os
import requests
from urllib.parse import urlparse

def download_images(image_urls, save_dir='images'):
    """
    批量下載圖片到指定目錄
    :param image_urls: 圖片URL列表
    :param save_dir: 保存目錄(默認保存到當前目錄的images文件夾)
    """
    # 創(chuàng)建保存目錄
    os.makedirs(save_dir, exist_ok=True)
    
    for url in image_urls:
        try:
            # 發(fā)送HTTP請求
            response = requests.get(url, stream=True, timeout=5)
            response.raise_for_status()  # 檢查請求是否成功
            
            # 提取文件名
            parsed_url = urlparse(url)
            filename = os.path.basename(parsed_url.path)
            if not filename:
                filename = f"image_{len(os.listdir(save_dir)) + 1}.jpg"
            
            # 保存文件
            filepath = os.path.join(save_dir, filename)
            with open(filepath, 'wb') as f:
                for chunk in response.iter_content(1024):
                    f.write(chunk)
            
            print(f"成功下載: {filename}")
        except Exception as e:
            print(f"下載失敗 {url} - 錯誤: {str(e)}")

# 示例使用
if __name__ == "__main__":
    # 從網(wǎng)頁解析圖片URL(示例)
    image_urls = [
        "https://example.com/images/cat.jpg",
        "https://example.com/images/dog.png",
        "https://example.com/images/bird.webp"
    ]
    
    download_images(image_urls)

進階方案:從網(wǎng)頁批量抓取圖片

from bs4 import BeautifulSoup
import requests

def scrape_images_from_webpage(url, save_dir='images'):
    """從網(wǎng)頁中抓取所有圖片并下載"""
    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        img_tags = soup.find_all('img')
        
        image_urls = [img.get('src') for img in img_tags if img.get('src')]
        download_images(image_urls, save_dir)
    except Exception as e:
        print(f"抓取失敗: {str(e)}")

# 示例使用
scrape_images_from_webpage("https://example.com/gallery")

關(guān)鍵點說明:

依賴庫安裝

pip install requests beautifulsoup4

核心功能

  • 自動創(chuàng)建保存目錄
  • 智能處理文件名(保留原始文件名或自動生成)
  • 流式下載避免內(nèi)存溢出
  • 完善的錯誤處理

擴展功能建議

# 添加多線程加速(使用concurrent.futures)
from concurrent.futures import ThreadPoolExecutor

# 在download_images函數(shù)中替換循環(huán)部分
with ThreadPoolExecutor(max_workers=8) as executor:
    executor.map(download_single_image, image_urls)

注意事項

  • 遵守網(wǎng)站robots.txt協(xié)議
  • 添加User-Agent頭避免被屏蔽
  • 添加下載延遲防止IP被封
  • 處理不同圖片格式(通過MIME類型判斷)

完整增強版代碼

import os
import requests
from urllib.parse import urlparse
from concurrent.futures import ThreadPoolExecutor
import time

def download_single_image(url, save_dir):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
        response = requests.get(url, headers=headers, stream=True, timeout=10)
        response.raise_for_status()
        
        # 獲取內(nèi)容類型確定擴展名
        content_type = response.headers.get('content-type')
        ext = 'jpg' if 'jpeg' in content_type else content_type.split('/')[-1]
        
        filename = os.path.basename(urlparse(url).path) or f"img_{int(time.time()*1000)}.{ext}"
        filepath = os.path.join(save_dir, filename)
        
        with open(filepath, 'wb') as f:
            for chunk in response.iter_content(8192):
                f.write(chunk)
        return True, filename
    except Exception as e:
        return False, str(e)

def batch_download(image_urls, save_dir='images', max_workers=8, delay=0.5):
    os.makedirs(save_dir, exist_ok=True)
    success = []
    failed = []
    
    def worker(url):
        result, info = download_single_image(url, save_dir)
        if result:
            success.append(info)
        else:
            failed.append((url, info))
        time.sleep(delay)  # 避免請求過載
    
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        executor.map(worker, image_urls)
    
    print(f"\n下載完成!成功: {len(success)} 失敗: {len(failed)}")
    return success, failed

# 使用示例
if __name__ == "__main__":
    urls = [
        "https://example.com/image1.jpg",
        "https://example.com/image2.png",
        # 添加更多URL...
    ]
    
    success, failed = batch_download(urls)
    
    print("\n成功下載列表:")
    for name in success:
        print(f" - {name}")
        
    print("\n失敗列表:")
    for url, reason in failed:
        print(f" - {url}: {reason}")

最佳實踐建議:

  1. 添加代理支持:在requests.get中添加proxies參數(shù)
  2. 限速功能:使用time.sleep()控制請求頻率
  3. 斷點續(xù)傳:通過檢查文件大小實現(xiàn)
  4. 自動重試機制:使用tenacity庫實現(xiàn)
  5. 文件去重:使用哈希值檢查重復(fù)文件

這個方案提供了從基礎(chǔ)到進階的完整實現(xiàn),用戶可以根據(jù)實際需求選擇適合的版本。代碼中包含了詳細的錯誤處理和日志輸出,適合直接用于生產(chǎn)環(huán)境。

到此這篇關(guān)于Python批量下載圖片的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Python批量下載圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用flask如何獲取post請求參數(shù)

    使用flask如何獲取post請求參數(shù)

    近日在使用flask框架獲取前端的請求時獲取參數(shù)時,遇到了幾個問題,所以下面這篇文章主要給大家介紹了關(guān)于使用flask如何獲取post請求參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 如何安裝多版本python python2和python3共存以及pip共存

    如何安裝多版本python python2和python3共存以及pip共存

    這篇文章主要為大家詳細介紹了python多版本的安裝方法,解決python2和python3共存以及pip共存問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • python程序的打包分發(fā)示例詳解

    python程序的打包分發(fā)示例詳解

    這篇文章主要為大家介紹了python程序的打包分發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 關(guān)于python中DLIB包無法安裝問題解決辦法

    關(guān)于python中DLIB包無法安裝問題解決辦法

    dlib一個在計算機視覺和機器學習領(lǐng)域尤其是人臉識別中廣泛應(yīng)用的庫,其安裝過程往往令開發(fā)者頭疼不已,這篇文章主要介紹了關(guān)于python中DLIB包無法安裝問題解決辦法,需要的朋友可以參考下
    2026-01-01
  • python安裝本地whl的實例步驟

    python安裝本地whl的實例步驟

    在本篇文章里小編給大家整理的是關(guān)于python安裝本地whl的實例步驟,有需要的朋友們可以學習下。
    2019-10-10
  • Python-嵌套列表list的全面解析

    Python-嵌套列表list的全面解析

    下面小編就為大家?guī)硪黄狿ython-嵌套列表list的全面解析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • python實現(xiàn)打開手機app并點擊操作

    python實現(xiàn)打開手機app并點擊操作

    這篇文章主要介紹了python實現(xiàn)打開手機app并點擊操作,本文分為兩部分一部分是打開應(yīng)用,第二部分是調(diào)式手機連接電腦,需要的朋友可以參考下
    2022-04-04
  • django queryset 去重 .distinct()說明

    django queryset 去重 .distinct()說明

    這篇文章主要介紹了django queryset 去重 .distinct()說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 用Python寫一個簡易版彈球游戲

    用Python寫一個簡易版彈球游戲

    這篇文章主要介紹了用Python寫一個簡易版彈球游戲,文中有很多實用代碼,對正在學習python的小伙伴們有很大的幫助.需要的朋友可以參考下
    2021-04-04
  • 十行Python代碼實現(xiàn)文字識別功能

    十行Python代碼實現(xiàn)文字識別功能

    這篇文章主要和大家分享如何調(diào)用百度的接口實現(xiàn)圖片的文字識別。整體是用Python實現(xiàn),所需要使用的第三方庫包括aip、PIL、keyboard、pyinstaller,需要的可以參考一下
    2022-05-05

最新評論

崇州市| 福贡县| 安溪县| 龙江县| 简阳市| 开原市| 隆回县| 兴安县| 宁陵县| 贵阳市| 德保县| 桐乡市| 平顶山市| 苍溪县| 日喀则市| 蓝田县| 新龙县| 孝昌县| 寻乌县| 云安县| 连江县| 通河县| 库尔勒市| 尼勒克县| 嘉峪关市| 万源市| 赤壁市| 军事| 丹巴县| 土默特左旗| 谢通门县| 唐河县| 方正县| 乐山市| 疏勒县| 旌德县| 白水县| 新巴尔虎左旗| 手机| 达拉特旗| 秭归县|