百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 软件资讯 > 正文

11 种Python下载姿势,一种比一种高级!助你轻松应对各种下载场景

ninehua 2025-02-19 13:20 30 浏览

切记!!!在数据驱动的时代,掌握高效获取网络资源的技能至关重要。

Python,作为一门简洁而强大的语言,为我们提供了丰富的工具来下载文件,无论是简单的图片、网页,还是存储在云端的资源。

本文将介绍如何使用 Python 下载文件,从基础模块到高级技巧,助你轻松应对各种下载场景。



1、Requests:简洁优雅的下载利器

requests 模块以其简洁易用的 API 成为 Python 下载文件的首选。只需几行代码,即可轻松下载文件。

# encoding=utf-8
import requests

url = 'https://www.example.com/myfile.zip'  # 文件  URL
response = requests.get(url)  # 发送  GET  请求

with  open('myfile.zip', 'wb') as f:  # 打开文件以二进制写入模式
    f.write(response.content)  # 将响应内容写入文件

2、Wget:经典下载工具的 Python 封装

wget 是一个经典的命令行下载工具,Python 的 wget 模块对其进行了封装,提供了便捷的下载功能。

import wget

url = 'https://www.python.org/static/community_logos/python-logo-master-v3-TM.png'  # 文件 URL
wget.download(url, 'python-logo.png')  # 下载文件并指定保存路径

3、挑战:下载重定向的文件

有些情况下,我们需要下载的文件 URL 会发生重定向。requests 模块可以轻松应对这种情况。allow_redirects=True允许重定向

# encoding=utf-8
import requests

url = 'https://www.example.com/redirect'  # 重定向 URL
response = requests.get(url, allow_redirects=True)  # 允许重定向

with open('myfile.pdf', 'wb') as f:
    f.write(response.content)

4、分块下载:应对大型文件

下载大型文件时,为了避免内存溢出,我们可以使用分块下载的方式。

# encoding =UTF-8
import requests

url = 'https://www.example.com/largefile.pdf'
response = requests.get(url, stream=True)  # 以流式方式获取响应

with open('largefile.pdf', 'wb') as f:
    for chunk in response.iter_content(chunk_size=1024):  # 每次读取 1024 字节
        if chunk:
            f.write(chunk)

5、并行下载:提升下载效率

当需要下载多个文件时,我们可以使用多线程或多进程来并行下载,提高效率。

import os
import time
from concurrent.futures import ThreadPoolExecutor

import requests

urls = [  # 文件 URL 列表
    ('file1.txt', 'https://www.example.com/file1.txt'),
    ('file2.jpg', 'https://www.example.com/file2.jpg'),
    ('file3.zip', 'https://www.example.com/file3.zip'),
]


def download_file(url, path):
    response = requests.get(url)
    with open(path, 'wb') as f:
        f.write(response.content)


start_time = time.time()

with ThreadPoolExecutor(max_workers=3) as executor:  # 创建线程池
    for url in urls:
        executor.submit(download_file, url[1], url[0])  # 提交下载任务

end_time = time.time()

print(f"下载完成,耗时:{end_time - start_time:.2f} 秒")

6、下载进度条:实时追踪下载进度

使用 clint 模块,我们可以为下载过程添加进度条,实时追踪下载进度。

# encoding = utf-8
import requests
from clint.textui import progress

url = 'https://www.example.com/largefile.zip'
response = requests.get(url, stream=True)

total_length = int(response.headers.get('content-length'))

with open('largefile.zip', 'wb') as f:
    for chunk in progress.bar(response.iter_content(chunk_size=1024), expected_size=(total_length / 1024) + 1):
        if chunk:
            f.write(chunk)

7、Urllib:Python 内置的网络请求库

urllib 是 Python 内置的网络请求库,无需安装即可使用。

import?urllib.request

url?=?'https://www.example.com'
urllib.request.urlretrieve(url,?'index.html')??#?下载网页并保存为?index.html

8、代理下载:保护隐私,突破限制

在某些情况下,我们需要使用代理服务器下载文件,例如保护隐私、突破网络限制等。

# encoding=utf-8
import urllib.request

proxy_handler = urllib.request.ProxyHandler({'http': 'http://your_proxy:port'})  # 设置代理
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)

url = 'https://www.example.com/file.zip'
urllib.request.urlretrieve(url, 'file.zip')

9、Urllib3:功能强大的网络请求库

urllib3 是 urllib 的升级版本,提供了更多功能,例如连接池、SSL 验证等。

# encoding=utf-8
import urllib3
import shutil

url = 'https://www.example.com'

http = urllib3.PoolManager()
response = http.request('GET', url)

with open('index.html', 'wb') as f:
    shutil.copyfileobj(response.data, f)

10、Boto3:下载 Amazon S3 文件

boto3 是 AWS 官方提供的 Python SDK,可以方便地操作 Amazon S3 等服务。

# encoding =utf-8
import boto3

bucket_name = 'your-bucket-name'  # 存储桶名称
file_name = 'your-file.txt'  # 文件名
download_path = 'downloaded_file.txt'  # 下载路径

s3 = boto3.client('s3')
s3.download_file(bucket_name, file_name, download_path)

11、Asyncio:异步下载,提升效率

asyncio 是 Python 3.4 版本引入的异步 IO 库,可以实现高效的异步下载。

# encoding = utf-8
import asyncio
import aiohttp

async def download_file(session, url):
    async with session.get(url) as response:
        content = await response.read()
        return content

async def main():
    urls = [
        'https://www.example.com/file1.txt',
        'https://www.example.com/file2.jpg',
        'https://www.example.com/file3.zip',
    ]

    async with aiohttp.ClientSession() as session:
        tasks = [download_file(session, url) for url in urls]
        results = await asyncio.gather(*tasks)

        for i, result in enumerate(results):
            with open(f'file{i+1}', 'wb') as f:
                f.write(result)

if __name__ == '__main__':
    asyncio.run(main())

总结:

本文介绍了使用 Python 下载文件的各种方法,从基础模块到高级技巧,涵盖了大部分下载场景。希望本文能够帮助你更加高效地获取网络资源,在数据科学的道路上披荆斩棘!

相关推荐

Mac常用App推荐:免费思维导图工具MindNode

思维导图是一种很便捷的梳理信息的方式,Xmind在部分用户眼中可能已经成为思维导图的代名词,但其实还有很多其它思维导图软件也各有千秋,对于Mac用户(以及比较依赖苹果生态的用户)来说,MindNode...

适用于macOS的免费开源好用的纯文本编辑器CotEditor

介绍CotEditor是一个轻巧,整洁但功能强大的文本编辑器。CotEditor完全是针对macOS制作的。它的外观和行为与macOS应用程序的外观和行为相同。CotEditor启动如此之快,您可以在...

香哭了|免费做饭游戏神仙网站无需下载Mac可玩

本期直接给宝子们一个网站~里面全是烹饪做饭游戏,想玩啥就玩啥。全部免费主题丰富无需下载不用登陆不占内存有小广,但时间不长,几秒就可skip掉,可以接受。亲测Mac系统也能玩!!真香cookingga...

推荐 Mac 平台上常用的 5 款 PDF 阅读编辑软件

随着PDF在日常学习工作中的使用越来越广泛,越来越多的政府部门、企业以及教育机构使用PDF来简化文档管理流程、提高效率并减少对纸张的依赖,各式各样的PDF软件也如雨后春笋般的出现。本期Ma...

balenaEtcher for mac(U盘启动盘制作工具)

balenaEtcherformac分享给大家,balenaEtcher是一个mac电脑上U盘启动盘制作工具,可以用来制作macOS、Linux、CentOS、Windows等系统的u盘启动盘。...

Mac 系统情况一目了然,而且还免费:Instastats

Mac上的PowerUser想必都听说过iStatMenus,这是一款可以监控硬件实时状态的小工具,优雅适配Yosemite、实时统计各App状态、丰富个性的配色方案……只有一个问题...

Karabiner Elements for Mac(键盘改键神器)v13.5.9中文免费版

KarabinerElementsforMac一款非常不错的键盘改建神器,KarabinerElementsmac能将普通键映射到任意键功能,支持创建用户可以在其间切换的多个配置文件。测试环...

限时免费!可激活的Mac版微软office 2024!请低调获取

MicrosoftOffice2024forMac是一款专为苹果Mac操作系统设计的办公软件套件,旨在提供一系列强大的工具来满足个人和企业的日常办公需求。以下是关于Office2024f...

强得很!这几款软件,让你的Mac电脑更好用,建议收藏~

1.Vox-Mac上最好用的免费全能音乐播放器VoxMac版这是一款简洁Mac音乐播放器,支持Mp3、OGG、FLAC(无损格式)等多种音频格式,可将听歌记录同步到Last.fm。Vo...

Nik Collection 5 for Mac(PS滤镜插件套装)中文版

NikCollection中文版是一款ps滤镜插件套装,其包含了七款ps插件,功能涵盖修图、调色、降噪、胶片滤镜等方面。NikCollection作为很多摄影师和摄影爱好者所熟悉的一大照片后期...

gSwitch for mac(GPU显卡切换工具)v1.9.7免费版

想要更简便的管理显卡问题推荐使用gSwitchMac版,该软件主要是为了解决一些在不需要使用独立显卡的情况下系统会自动切换到独立显卡从而增加mac的发热量。gSwitch软件介绍一款mac显...

7种适用于Mac的免费杀毒软件(适合mac的杀毒软件)

多年来,由于Mac被感染恶意病毒的可能性普遍低于其他操作系统,因此关于Mac是否确实需要防病毒软件,一直存在着争议。如果您趋向于在Mac上安装防病毒程序,以加固安全的话,那么我建议您多考虑那些免费选项...

在 M1/M2 Mac 上,让 Windows 11 免费“跑”起来

自从苹果在产品中逐步使用自研的M系列芯片淘汰掉英特尔芯片之后,很多事情都发生了改变。作者|KirkMcElhearn和JoshuaLong译者|弯月出品|CSDN(ID:CS...

苹果Mac OS X 10.10公测版明日免费下载

IT之家(www.ithome.com):苹果MacOSX10.10公测版明日免费下载不久前,苹果公司在WWDC2014宣布了新一代OSX10.10桌面平台,同时也表示很快向公众免费提供Be...

卡普空《生化危机7》iOS/iPad/Mac版现已发售:游戏免费试玩

IT之家7月2日消息,在今早举行的CAPCOMNEXT-Summer2024节目上,官方公布了《生化危机7》iPhone/iPad/Mac版发售预告,号称拥有令人印象深刻的视...