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导出DBF文件到Excel的方法
Jul 25 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
用Python实现读写锁的示例代码
Nov 05 Python
Python实现合并excel表格的方法分析
Apr 13 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
Django bulk_create()、update()与数据库事务的效率对比分析
May 15 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
Django mysqlclient安装和使用详解
Sep 17 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
PHP邮件专题
2006/10/09 PHP
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
解析php中的escape函数
2013/06/29 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
网页图片延时加载的js代码
2010/04/22 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
python内存管理分析
2015/04/08 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
python实现学生信息管理系统
2020/04/05 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Python遍历字典方式就实例详解
2019/12/28 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
HR喜欢的自荐信格式
2013/10/08 职场文书
药品质量检测应届生求职信
2013/11/14 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
初中班级口号
2014/06/09 职场文书
2015年征兵工作总结
2015/07/23 职场文书