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的Django框架中实现Hacker News的一些功能
Apr 17 Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
python线程池threadpool使用篇
Apr 27 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
Python 依赖库太多了该如何管理
Nov 08 Python
django正续或者倒序查库实例
May 19 Python
Python flask框架端口失效解决方案
Jun 04 Python
python如何输出反斜杠
Jun 18 Python
浅谈Django前端后端值传递问题
Jul 15 Python
python实现邮件循环自动发件功能
Sep 11 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 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/10/09 PHP
php解析url的三个示例
2014/01/20 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
jtable列中自定义button示例代码
2013/11/21 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
python调用webservice接口的实现
2019/07/12 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
老师推荐信
2013/10/28 职场文书
电子商务专业推荐信范文
2013/12/02 职场文书
员工安全生产承诺书
2014/05/22 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
文案策划岗位职责
2015/02/11 职场文书
2015新学期家长寄语
2015/02/26 职场文书
办公室禁烟通知
2015/04/23 职场文书
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
MySQL中order by的执行过程
2022/06/05 MySQL
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript