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

2024-10-10 09:18:06 浏览数 (5)

使用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]))

0 人点赞