欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python如何下載網(wǎng)絡文件到本地指定文件夾

 更新時間:2025年05月18日 11:14:16   作者:MartinYangHJ  
這篇文章主要為大家詳細介紹了python如何實現(xiàn)下載網(wǎng)絡文件到本地指定文件夾,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

 在Python中下載文件到本地指定文件夾可以通過以下步驟實現(xiàn),使用requests庫處理HTTP請求,并結合os模塊處理文件路徑:

import requests, os,datetime
from urllib.parse import urlparse,parse_qs
 
"""
獲取request header信息,Cookie根據(jù)網(wǎng)址需要自己設定
"""
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7;application/json, text/javascript, */*; q=0.01',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Cookie': '132213213213213213',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
}
 
 
def download_file(url, save_dir=None,file_name=None):
    """
    下載文件并保存到指定路徑,,從網(wǎng)絡路徑中獲取文件名,例如https://127.0.0.1:8000/web/file/5ed63734774b40d181fd96e1c58133d2.pdf
    :param url: 文件下載URL
    :param save_dir: 文件保存路徑
    :param file_name: 文件名
    """
    try:
        if file_name is None:
            parse_url=urlparse(url)
            file_name=os.path.basename(parse_url.path)
            if not file_name:
                file_name="download_file_"+datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        if save_dir is None:
            save_dir=rf"C:\Users\Desktop\download_file"
        save_path=os.path.abspath(save_dir)
        file_path=os.path.join(save_path,file_name)
 
        if save_dir and not os.path.exists(save_dir):
            os.makedirs(save_dir, exist_ok=True)
 
        # 發(fā)起帶流式傳輸?shù)腉ET請求
        with requests.get(url, stream=True,headers=headers) as response:
            response.raise_for_status()  # 檢查HTTP狀態(tài)碼
 
            # 分塊寫入文件
            with open(file_path, 'wb') as file:
                for chunk in response.iter_content(chunk_size=8192):
                    if chunk:  # 過濾保持連接的空白塊
                        file.write(chunk)
 
        print(f"文件下載成功,保存路徑:{file_path}")
        return True
    except requests.exceptions.RequestException as e:
        print(f"網(wǎng)絡請求失?。簕str(e)}")
    except IOError as e:
        print(f"文件操作失?。簕str(e)}")
    except Exception as e:
        print(f"未知錯誤:{str(e)}")
 
    return False
 
 
def download_file2(url, save_dir=None,file_name=None):
    """
        下載文件并保存到指定路徑,從網(wǎng)絡路徑中獲取文件名,例如https://127.0.0.1:8000/web/file/5ed63734774b40d181fd96e1c58133d2.pdf
        :param url: 文件下載URL
        :param save_dir: 文件保存路徑
        :param file_name: 文件名
    """
    try:
        if file_name is None:
            parse_url = urlparse(url)
            file_name = os.path.basename(parse_url.path)
            if not file_name:
                file_name = "download_file_" + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        if save_dir is None:
            save_dir = rf"C:\Users\Desktop\download_file"
        save_path = os.path.abspath(save_dir)
        file_path = os.path.join(save_path, file_name)
 
        if save_dir and not os.path.exists(save_dir):
            os.makedirs(save_dir, exist_ok=True)
 
        response = requests.get(url, stream=True, headers=headers)
        response.raise_for_status()
        with open(file_path, 'wb') as file:
            file.write(response.content)
        return True
    except requests.exceptions.RequestException as e:
        print(f"網(wǎng)絡請求失?。簕str(e)}")
    except IOError as e:
        print(f"文件操作失?。簕str(e)}")
    except Exception as e:
        print(f"未知錯誤:{str(e)}")
 
    return False
 
 
def download_file3(url, save_dir=None,file_name=None):
    """
        下載文件并保存到指定路徑,從網(wǎng)絡路徑中query參數(shù)中獲取文件名,例如https://127.0.0.1:8000/web/file?path=2025041616372016\\5ed63734774b40d181fd96e1c58133d2.pdf
        :param url: 文件下載URL
        :param save_dir: 文件保存路徑
        :param file_name: 文件名
    """
    try:
        if file_name is None:
            parse_url = urlparse(url)
            # 從query參數(shù)中提取文件名
            query_params = parse_qs(parse_url.query)
            # 獲取 path 參數(shù)的值,path可根據(jù)實際情況進行調(diào)整
            path_value = query_params.get('path', [''])[0]
 
            # 提取文件名(最后一個反斜杠后的部分)
            file_name = path_value.split('\\')[-1]
            if not file_name:
                file_name = "download_file_" + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        if save_dir is None:
            save_dir = rf"C:\Users\Desktop\download_file"
        save_path = os.path.abspath(save_dir)
        file_path = os.path.join(save_path, file_name)
 
        if save_dir and not os.path.exists(save_dir):
            os.makedirs(save_dir, exist_ok=True)
 
        response = requests.get(url, stream=True, headers=headers)
        response.raise_for_status()
        with open(file_path, 'wb') as file:
            file.write(response.content)
        return True
    except requests.exceptions.RequestException as e:
        print(f"網(wǎng)絡請求失?。簕str(e)}")
    except IOError as e:
        print(f"文件操作失?。簕str(e)}")
    except Exception as e:
        print(f"未知錯誤:{str(e)}")
 
    return False

使用示例

# 示例1:自動從URL提取文件名
download_file(
    url="https://example.com/report.pdf",
    save_dir="./downloads"
)
 
download_file2(
    url="https://example.com/report.pdf",
    save_dir="./downloads"
)
 
# 示例2:自定義文件名
download_file(
    url="https://example.com/data?format=csv",
    save_dir="./data_files",
    file_name="dataset.csv"
)
 
download_file2(
    url="https://example.com/data?format=csv",
    save_dir="./data_files",
    file_name="dataset.csv"
)
 
# 示例3:從網(wǎng)絡路徑中query參數(shù)中獲取文件名
download_file3(
    url="https://example.com/data?path=20250417\\example.csv",
    save_dir="./data_files",
    file_name="example.csv"
)

關鍵點說明

文件名處理:

默認從URL路徑中提取文件名(如https://a.com/b.zip提取b.zip)。

若URL不包含文件名(如以/結尾),則使用默認名稱downloaded_file。

支持通過參數(shù)file_name自定義文件名。

支持從URL路徑的Query參數(shù)中獲取文件名(如https://example.com/data?path=20250417\\example.csv提取example.csv)

路徑處理:

使用os.path模塊確保路徑跨平臺兼容。

自動創(chuàng)建目標目錄(若不存在)。

流式下載:

使用stream=True分塊下載,避免大文件占用過多內(nèi)存。

通過iter_content逐塊寫入,提升可靠性。

異常處理:

捕獲常見錯誤(如網(wǎng)絡問題、權限不足)。

使用response.raise_for_status()檢查HTTP狀態(tài)碼。

擴展性:

支持自定義請求頭(如模擬瀏覽器訪問)。

可調(diào)整chunk_size優(yōu)化下載速度與內(nèi)存占用。

方法補充

python下載文件到指定文件夾

# coding:utf-8
import os
import shutil
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# print os.getcwd()
# 有些文件夾下面有很多文件夾,每個文件夾下面有很多視頻文件,現(xiàn)在通過腳本,將文件夾下面的所有文件轉移到一個目錄下面
# 統(tǒng)計訪問的文件夾數(shù)量及文件數(shù)量
countNum = [0, ]countFile = [0, ]# 選擇全部移除或者指定后綴名文件
# 查找文件
def move_all_files(dir_path):
if os.path.exists(dir_path):
countNum[0] += 1
# 輸出遍歷的文件夾數(shù)量
print "*****", countNum[0], "*****"+dir_path
# 指定文件夾下的所有文件和文件夾
path_list = os.listdir(dir_path)
# 遍歷
for each_path in path_list:
# 如果是文件夾就繼續(xù)遍歷
print each_path
if os.path.isdir(dir_path+""+each_path):
# 移動所有文件到指定目錄下面
src=dir_path+""+each_path
move_all_files(src)
else:
# 如果是指定文件類型,則復制文件
file_type = os.path.splitext(each_path)[1] # 判斷是否為選擇的文件類型
selected = False
if file_type == select_type or select_type == 'All':
selected = True
if selected:
# 復制文件
src_file = dir_path + "" + each_path
des_file = des_pos + "" + each_path
print "正在復制", each_path
shutil.copyfile(src_file, des_file)
# 文件+1
countFile[0] += 1
else:
print "指定路徑不存在"
# 需要復制文件的文件夾位置
give_pos = r"C:UserslanceDownloadsJava Web編程相關"
# 需要復制到的位置
des_pos = r"C:UserslanceDownloads測試"
# All 或者 指定文件后綴名
select_type = 'All'
# 如果不存在,創(chuàng)建
if not os.path.exists(unicode(des_pos, 'utf-8')):
os.mkdir(unicode(des_pos, "utf-8"))
# 移動文件
move_all_files(unicode(give_pos, "utf-8"))
print "將文件從****'", give_pos, "'復制到****'", des_pos, "'"
print "共訪問了", countNum[0], "個文件夾"
print "共復制了 ", countFile[0], " 個文件"

到此這篇關于python如何下載網(wǎng)絡文件到本地指定文件夾的文章就介紹到這了,更多相關python下載網(wǎng)絡文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python sklearn KFold 生成交叉驗證數(shù)據(jù)集的方法

    Python sklearn KFold 生成交叉驗證數(shù)據(jù)集的方法

    今天小編就為大家分享一篇Python sklearn KFold 生成交叉驗證數(shù)據(jù)集的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python random模塊制作簡易的四位數(shù)驗證碼

    Python random模塊制作簡易的四位數(shù)驗證碼

    這篇文章主要介紹了Python random模塊制作簡易的四位數(shù)驗證碼,文中給大家提到了python中random模塊的相關知識,需要的朋友可以參考下
    2020-02-02
  • Python tkinter實現(xiàn)的圖片移動碰撞動畫效果【附源碼下載】

    Python tkinter實現(xiàn)的圖片移動碰撞動畫效果【附源碼下載】

    這篇文章主要介紹了Python tkinter實現(xiàn)的圖片移動碰撞動畫效果,涉及Python tkinter模塊操作圖片基于坐標動態(tài)變換與數(shù)值判定實現(xiàn)移動、碰撞檢測等相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • Python全棧之正則表達式

    Python全棧之正則表達式

    這篇文章主要為大家介紹了Python正則表達式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • python里面單雙下劃線的區(qū)別詳解

    python里面單雙下劃線的區(qū)別詳解

    本文主要介紹了python里面單雙下劃線的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Python2和Python3的共存和切換使用

    Python2和Python3的共存和切換使用

    這篇文章主要介紹了Python2和Python3的共存和切換使用,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • Python對wav文件的重采樣實例

    Python對wav文件的重采樣實例

    今天小編就為大家分享一篇Python對wav文件的重采樣實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python實現(xiàn)微信好友數(shù)據(jù)爬取及分析

    Python實現(xiàn)微信好友數(shù)據(jù)爬取及分析

    這篇文章會基于Python對微信好友進行數(shù)據(jù)分析,這里選擇的維度主要有:性別、頭像、簽名、位置,主要采用圖表和詞云兩種形式來呈現(xiàn)結果,其中,對文本類信息會采用詞頻分析和情感分析兩種方法,感興趣的小伙伴可以了解一下
    2021-12-12
  • 在Django中限制已登錄用戶的訪問的方法

    在Django中限制已登錄用戶的訪問的方法

    這篇文章主要介紹了在Django中限制已登錄用戶的訪問的方法,Django是最具人氣的Python開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • 使用Python生成你的LaTeX公式基礎使用

    使用Python生成你的LaTeX公式基礎使用

    這篇文章主要介紹了使用Python生成你的LaTeX公式基礎使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01

最新評論