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之通过Python连接数据库
Oct 28 Python
python通过BF算法实现关键词匹配的方法
Mar 13 Python
python中global用法实例分析
Apr 30 Python
python从入门到精通(DAY 3)
Dec 20 Python
Python selenium文件上传方法汇总
Nov 19 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
python实现感知机线性分类模型示例代码
Jun 02 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
安装PyInstaller失败问题解决
Dec 14 Python
用Python自动清理系统垃圾的实现
Jan 18 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 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 中文处理函数集合
2008/08/27 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
python Tkinter版学生管理系统
2019/02/20 Python
Python实现最常见加密方式详解
2019/07/13 Python
pycharm配置git(图文教程)
2019/08/16 Python
python global关键字的用法详解
2019/09/05 Python
使用python实现kNN分类算法
2019/10/16 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Python日志syslog使用原理详解
2020/02/18 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
测量实习生自我鉴定
2013/09/19 职场文书
个人实用的自我评价范文
2013/11/23 职场文书
招股说明书范本
2014/05/06 职场文书
功夫熊猫观后感
2015/06/10 职场文书
企业年会祝酒词
2015/08/11 职场文书
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python