python 下载文件的几种方法汇总


Posted in Python onJanuary 06, 2021

前言

使用脚本进行下载的需求很常见,可以是常规文件、web页面、Amazon S3和其他资源。Python 提供了很多模块从 web 下载文件。下面介绍

一、使用 requests

requests 模块是模仿网页请求的形式从一个URL下载文件

示例代码:

import requests

url = 'xxxxxxxx' # 目标下载链接
r = requests.get(url) # 发送请求
# 保存
with open ('r.txt', 'rb') as f:
 f.write(r.content)
 f.close

二、使用 wget

安装 wget 库

pip install wget

示例代码

import wget

url = 'https://pic.cnblogs.com/avatar/1197773/20170712160655.png' # 目标路由,下载的资源是图片
path = 'D:/x.png' # 保存的路径
wget.download(url, path) # 下载

三、下载重定向资源

有些 URL 会被重定向到另一个 URL,后者是真正的下载链接。很多软件的下载其实都是这样的形式。URL看起来如下

https://readthedocs.org/projects/python-guide/downloads/pdf/latest

重定向的 URL 也可以用 requests 库进行下载,只需加一个参数就可以

import requests

url = 'https://readthedocs.org/projects/python-guide/downloads/pdf/latest'

# allow_redirect参数True表示允许重定向
r = requests.get(url, allow_redirect=True)
with open('r.txt', 'wb') as f:
 f.write(r)
 f.close()

四、大文件分块下载

有些文件非常的大,如果我们直接下载,可能会因为事件原因或者网络原因造成下载失败,这时候我可以使用分块下载的形式进行下载。

requests 支持分块下载,只需要将 stream 设为True 即可

import requests

url = 'https://readthedocs.org/projects/python-guide/downloads/pdf/latest'

# stream参数True表示分块下载
r = requests.get(url, stream=True)
with open('r.txt', 'wb') as f:
 for ch in r:
 f.write(r)
 f.close()

五、并行下载

多线程、多进程并发下载,大大提高下载速度

import requests
from multiprocessing.poll import Pool

# 定义下载函数
def url_response(url):
 path, url = url
 r = requests.get(url, stream=True)
 with open(path, 'wb') as f:
 for ch in r:
  f.write(ch)
 f.close()

urls = ['aaa', 'bbb', 'ccc'] # 假设有好多个下载链接

# 排队下载的方式
for x in urls:
 url_response(x)

# 并行下载的方式
ThreadPool(3).imap_unordered(url_response, urls)

六、下载中加入进度条

使用进度条更直观的查看下载进度,这里使用 clint 模块实现进度条功能

pip install clint

下载

import requests
from clint.textui import progess

url = 'xxxxxxxxxxx'
r = requests.get(url, stream=True)
with open('x.txt', 'wb') as f
 total_length = int(r.headers.get('content-length'))
 for ch in progress.bar(r.iter_content(chunk_size=2391975, expected)size=(total_length/1024)+1)):
 if ch:
  f.write(ch)
 f.close()

其他使用进度条的案例:Python 实现进度条的六种方式

七、使用 urllib 模块下载

urllib库是Python的标准库,因此不需要安装它。

下载代码

urllib.request.urlretrieve(URL, PATH)

八、通过代理下载

因为一些众所周知的原因我们下载国外的资源会非常的慢,这时候可以使用代理的方式进行下载

requests 模块使用代理

import requests

# 定义代理,假设本机上有个梯子的服务,代理端口是2258
proxy = {'http': 'http://127.0.0.1:2258'} 

url = 'xxxxxx'
r = requests.get(url, proxies=proxy )
.......

urllib 模块使用代理

import urllib.request

url = 'xxxxxxxxxx'
proxy = urllib.request.ProxyHandler({'http': '127.0.0.1'})
open_proxy = urllib.request.build_opener(proxy ) # 打开代理
urllib.request.urlretrieve(url)

九、使用 urllib3

urllib3 是 urllib 模块的改进版本。使用pip下载并安装

pip install urllib3

以上就是python 下载文件的几种方法汇总的详细内容,更多关于python 下载文件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
在Python程序中操作文件之isatty()方法的使用教程
May 24 Python
python数据结构链表之单向链表(实例讲解)
Jul 25 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
Python模拟随机游走图形效果示例
Feb 06 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
python实现图片文件批量重命名
Mar 23 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
pygame实现成语填空游戏
Oct 29 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
通过实例了解Python异常处理机制底层实现
Jul 23 Python
python Scrapy框架原理解析
Jan 04 Python
python 视频下载神器(you-get)的具体使用
Jan 06 #Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 #Python
如何在vscode中安装python库的方法步骤
Jan 06 #Python
如何利用python 读取配置文件
Jan 06 #Python
Pandas之缺失数据的实现
Jan 06 #Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 #Python
java字符串格式化输出实例讲解
Jan 06 #Python
You might like
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
JavaScript 参考教程
2006/12/29 Javascript
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
python使用socket连接远程服务器的方法
2015/04/29 Python
python爬虫的工作原理
2017/03/05 Python
详解Django配置JWT认证方式
2020/05/09 Python
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
英国门把手公司:Door Handle Company
2019/05/12 全球购物
Python里面如何实现tuple和list的转换
2012/06/13 面试题
英语专业个人求职信范文
2014/02/01 职场文书
公司司机岗位职责范本
2014/03/03 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
2014年文员工作总结
2014/11/18 职场文书
步步惊心观后感
2015/06/12 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
redis实现排行榜功能
2021/05/24 Redis