前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python知识点100篇系列(19)-使用python下载文件的几种方式

python知识点100篇系列(19)-使用python下载文件的几种方式

原创
作者头像
JQ实验室
发布2024-10-10 09:18:06
180
发布2024-10-10 09:18:06
举报
文章被收录于专栏:实用技术

使用python下载文件的方法有很多种;首先要有一个下载链接

downlaod_url = 'http://****/download.file.png'

  • 第一种:使用requests

使用requests模块的get方法,请求url的结果写入文件;

代码语言:python
代码运行次数:0
复制
def downlaod1():
    import requests
    open ('download_file_1.png','wb').write(requests.get(url=downlaod_url).content)
  • 第二种: 使用wget模块

适合小文件,给wget模块的download方法传入两个URL和路径。

代码语言:python
代码运行次数:0
复制
def download2():
    import wget
    wget.download(downlaod_url,'download_file_2.png')
  • 第三种:使用线程池下载文件 使用muliprocessing中的ThreadPool模块,这个模块课允许你使用池运行多个线程或进程。
代码语言:python
代码运行次数:0
复制
def d3(path,url):
    import requests
    rc = requests.get(url,stream=True)
    with open(path,'wb') as f:
        for r in rc:
            f.write(r)

def downlaod3():
    from multiprocessing.pool import ThreadPool
    ThreadPool(3).imap\_unordered(d3,['1.png','2.png','3.png'][downlaod\_url,downlaod\_url,downlaod\_url])
   
  • 第四种:使用urllib3下载文件

使用urllib3的PoolManager ,跟踪必要的连接池,减少网络开销

使用client发送一个GET请求来获取响应写入文件

代码语言:python
代码运行次数:0
复制
def download4():
    import urllib3 
    import shutil
    client = urllib3.PoolManager()
    with open('downlaod_file_4.png') as f, client.request('GET',downlaod_url) as res:
        shutil.copyfileobj(res,f)
  • 第五种:使用asyncio异步下载

asyncio模块主要用于处理系统事件。它围绕一个事件循环进行工作,该事件循环会等待事件发生,然后对该事件作出反应。这个反应可以是调用另一个函数。这个过程称为事件处理。

asyncio模块使用协同程序进行事件处理; 适合下载多个文件;

代码语言:python
代码运行次数:0
复制
async def d5(url):
    import requests
    open ('path','wb').write(requests.get(url).content)

import asyncio

async def run_func(urls):
    downlaod5 = [d5(url) for url in urls]
    done,appending = await asyncio.wait(downlaod5)
    for d in done:
        print(d.result())

event_loog = asyncio.get_event_loop()
event_loog.run_until_complete(run_func([downlaod_url,downlaod_url,downlaod_url]))

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档