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中针对函数处理的特殊方法
Mar 06 Python
用python实现的线程池实例代码
Jan 06 Python
Python反射的用法实例分析
Feb 11 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 Python
Python实现打砖块小游戏代码实例
May 18 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
Python tkinter常用操作代码实例
Jan 03 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 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
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
js 获取服务器控件值的代码
2010/03/05 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
python里 super类的工作原理详解
2019/06/19 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
Python实现播放和录制声音的功能
2020/08/12 Python
python实现代码审查自动回复消息
2021/02/01 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
会计系毕业个人自荐信格式
2013/09/23 职场文书
高一英语教学反思
2014/01/22 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
个人买房协议书范本
2014/10/06 职场文书
初中教师个人总结
2015/02/10 职场文书
中国合伙人观后感
2015/06/02 职场文书
运动会广播稿50字
2015/08/19 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js
mysql 子查询的使用
2022/04/28 MySQL