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

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

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

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

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

相关推荐

鲁威地产携手贝壳找房 联手破解真房源难题

12月17日,威海鲁威地产总经理王壮在三十店齐开盛典上,面向全市购房者郑重承诺:公司全部经纪人在所有渠道发布的房源信息都是真实存在、真实在售、真实价格、真实图片,绝对不会存在虚假房源。12月17日,鲁...

大公国际决定将福建福晟集团主体信用等级由A+下调为C

新京报贝壳财经讯大公国际决定将福建福晟集团有限公司(以下简称“福晟集团”)主体信用等级由A+下调为C,“18福晟02”信用等级由A+调整为C、“18福晟03”、“19福晟01”及“19福晟02”的信...

贝壳找房加入“数字化转型伙伴行动”助力居住服务行业转型升级

来源:环球网综合5月13日,国家发展改革委联合17个部门以及互联网平台、行业龙头企业、金融机构等145家单位,共同启动“数字化转型伙伴行动”,发布“数字化转型伙伴行动”倡议。倡议提出,政府和社会各界联...

德勤亚太区高科技高成长500强出炉 “新居住”平台贝壳找房位列榜首

12月6日,全球最具权威的审计服务机构德勤正式揭晓了“2018年亚太区高科技高成长500强”评选结果,领先且垂直的全价值链房产服务平台贝壳找房(北京)科技有限公司以过去三年的高增长率位列榜首。贝壳找房...

1元起投蚂蚁新股 中签率比打新高百倍 剁手买它前得知道这些

能够一元起投蚂蚁集团的基金,将于9月25日开售。9月22日晚,华夏、易方达、鹏华、汇添富、中欧等5只创新未来18个月封闭运作混合型基金正式获得批文,募集限额均为120亿元。5只产品计划参与蚂蚁集团股票...

胖东来和东方甄选的酱油,为什么都在做“0添加”?

近日,“酱油茅”计划赴港上市的消息一经发布便引来诸多关注,有声音称这是新董事长上任后的“第一把火”,意在加速全球化布局;也有观点认为此举可能是为了响应政策导向。不过,无论何种分析方向,都在获得更多的关...

多路力量齐发力 加码护航保就业

来源:经济参考报领军企业加速“招兵买马”新经济成就业蓄水池位于“六保”之首的保就业,正迎来多路力量加码护航。《经济参考报》记者获悉,有关部门和地方近日频频部署,千方百计稳定和扩大就业,加强对重点行业...

因任职期限规定等原因,青岛银行12年董事长辞职,仍持65万股

新京报贝壳财经讯(记者黄鑫宇)6月8日,青岛银行股份有限公司(002948.SZ,03866.HK;下称“青岛银行”)发布公告称,因监管有关银行关键岗位任职期限的规定以及临近退休年龄,郭少泉辞去该行董...

债券黑洞②:多家券商卷入信用债违约“漩涡”债券发行潜规则揭秘

“信用债结构性发行此前是在灰色地带,大家都睁一只眼闭一只眼,市场好的时候皆大欢喜,各方受益。信用一旦分化,弱信用主体一定先倒霉。”业内人士表示。该来的还是来了,10月下旬以来,信用债违约的“灰犀牛”由...

居住服务数字化路径考:贝壳找房的大局观与“纵横术”

淘宝改变了一代人的消费习惯,美团引发用餐习惯和餐饮业态的剧变,滴滴则利用数字化调配出行资源。在“住”的领域,数字化又将触发什么样的变动?在这一过程中,虽然科技发展与用户习惯调整的大势有着重要影响,但行...

重组凉凉后国联大跌副总裁离职,国金回应正常,券商合并咋这么难

自9月下旬开始在市场引起轩然大波的国联证券与国金证券的合并计划,在10月12日晚以一纸“终止”公告而终结。双方先后称,由于交易关联方未能就本次重大资产重组方案的部分核心条款达成一致意见,故决定终止股权...

贝壳“佣金”再调查:3%为行业最低,中介行业透明化迫在眉睫

有律师指出,房产中介只能收取佣金,贷款服务费、评估费等都属于附属费用。这是二手房交易服务费混乱、不透明态势的最重要原因。取消贷款服务费,让房产中介行业透明化,迫在眉睫。...

“横店系”南华期货拟赴港IPO 业务重心将转向

基于深化全球战略布局的需要,南华期货拟赴港股上市。1月20日,南华期货宣布,公司拟赴港IPO。截至目前,公司正积极与相关中介机构就相关工作进行商讨,其他关于本次发行并上市的具体细节尚未确定。对于本次募...

贝壳找房ACN经纪人网络 “难以置信”的跨品牌联卖

第一个吃到蛋糕的人,滋味最值得分享。5月6日,武汉德佑A+系统在当地上线第三天,郑艳就成交了一单,房源来自链家网,在她看来,“这是以前想都不敢想的事情”。作为武汉德佑海上五月花店的经纪人,郑艳吃到了武...

破产重整!华晨集团命运落定,经历了怎样的“魔幻”三个月

“没听说,一切正常。”尽管华晨集团破产重整消息已在坊间传开,11月20日,华晨集团这样回应。当天,沈阳市中级人民法院20日裁定受理债权人对华晨汽车集团控股有限公司(以下简称华晨集团)重整申请,标志着这...