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

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

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

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

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

相关推荐

数据可视化——R语言为ggplot图形添加P值和显著性水平

很久很久没有写原创文章了,今天给大家写一个大家发论文都用的到的操作--------为ggplot图形添加P值和显著性水平。建议先点收藏,再点关注,因为本文很长。掌握了本文,用R语言画下面这种图就不求人...

R语言从入门到精通:Day7(r语言入门教程)

原创小浣熊科研猫是时候关注我们一波了在向reviewer或者导师展示自己的统计分析结果时,一张图往往顶得上千言万语;在刚接触到数据时,图也能帮助我们发现数据中潜在的模式或者其中的异常值,这两个例子...

360儿童手表3评测 孩子遇危险一键SOS

儿童人身安全问题一直是家长最担忧的大事,多年来频频发生的儿童走失悲剧更是将这一话题推向了舆论高峰,在这个基础上,能打电话、防走丢的儿童智能手表迅速走红,可以说多了一剂强有力的助推剂。可以说,360儿童...

眼保健操想做就做,全面呵护孩子视力!喵喵儿童护眼仪体验

现在的孩子学习压力都很大,平时除了线下作业外,线上作业也不少,不是拍照上传小管家,就是录制视频发到班级群。作为家长的我们不能只关注孩子的学习,更要关注孩子的视力。根据国家卫健委数据显示,2020年我国...

用眼过度?一套恢复视力的米字操 飞行员都用的护眼方法了解一下

咱都知道,现在这生活里,电子产品无处不在,不管是上班用电脑,下班刷手机,眼睛那是一刻都闲不下来,好多人都有用眼过度的毛病。眼睛干干痒痒的,时不时还流眼泪,近视、老花眼等问题也都找上门来了。今天啊,我就...

软硬件齐发力,OPPO Find X8手机配备五大屏幕护眼技术组合

 直到现在2024年,依然有不少消费者非常青睐LCD屏幕的手机,无他,皆是因为LCD屏幕相较于传统的OLED屏幕来说,护眼性能确实要更胜一筹。而全新发布的OPPOFindX8则在软硬件上齐发力,通...

一只360°的智能眼睛------360智能摄像机云台AI版

在数字安防物联网飞速发展的当今,很多品牌都在不断崛起,360作为其中的佼佼者,也推出了不少这类的产品,从第一代水滴摄像头开始,360可谓在可视安防品类的产品上保持了高速发展的态势,无论是室内还是室外...

扩展功能强大:文本编辑器EditPlus 3.8下载

IT之家(www.ithome.com):扩展功能强大:文本编辑器EditPlus3.8下载IT之家讯文本编辑器EditPlus最近更新到3.80版,此次更新增加了和改进了包括对不同文件类型适配不...

世上的计算机只有两种字体(世上的计算机只有两种字体是什么)

还在纠结在你的下一个演示文稿中要不要使用宋体显示小字,或是你打算在你的论文中使用微软雅黑字体吗?今天的推送就来给大家介绍一下两大字体系列:serif和sans-serif。Serif字体如Times...

安卓字体大师2.0.1更新 增加字体搜索及分类功能

手机自带字体看久了想要换个新面貌?如何才能轻松换得新字体呢?机友们有福了!字体控们更是不容错过!作为一款强大的字体美化管家,字体大师2.0.1更新再添个性周到化服务。此次更新,字体大师增加了字体搜索和...

升职加薪全靠它,6款B站知乎上万人推荐的宝藏神器!强烈建议收藏

今天,我们给大家推荐6款电脑软件,B站知乎上万人推荐,每一个都强大到没朋友,升职加薪全靠它,下面一起来看看吧!1.Quicker这是一款能提高我们工作效率的神器,其能帮我们快速打开一些常用工具,像执行...

18种好看的电子书字体推荐!(附实机照片)

对kindle自带的黑体楷体宋体圆体腻味了吗,其实kindle可以自定义字体的,下面推荐几款好看的电子书字体,话不多说直接上干货(以下图片均为kindleoasis2代实机拍摄,方便大家感受各类...

只需万元就能打造媲美影院的环绕音效,JBL BAR 1000回音壁真不错

自从给卧室更换了全新的智能投影,我就发现客厅电视的使用频率变低了,和家人探讨了一下,大家都一致认为这台电视的音效不如新换投影的效果好,但要真说因为音效再换一台电视又觉得不值。纠结再三之后,决定入手一套...

外国歌手杀疯了!比官方机位更震撼的是直播机位的现场舞台,真牛

刷到是缘分,感谢大家的阅读,希望您能动动小手帮忙点赞,关注,评论。你的支持和鼓励是我前进的动力。在此祝福大家天天快乐,日日开心!0102外国歌手这现场表现力真是绝了,直播机位捕捉到的细节比官方镜头更有...

使命召唤手游开启测试,战区手游下载方法/登录教程

《使命召唤》手游澳大利亚服在11月30日开启测试,应该有很多网友都有所了解。作为一款高人气的FPS游戏,《使命召唤》在国外的地位甚至可以与CF和PUBG相媲美了。而且截止到目前,官方针对不同的地区都推...