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文件名和文件路径操作实例
Sep 29 Python
Python输入二维数组方法
Apr 13 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
django 自定义过滤器的实现
Feb 26 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
使用Python串口实时显示数据并绘图的例子
Dec 26 Python
python实现实时视频流播放代码实例
Jan 11 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
pandas DataFrame运算的实现
Jun 14 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
门卫工作岗位职责
2013/12/17 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
单位工作证明格式模板
2014/10/04 职场文书
工作自我评价范文
2015/03/05 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
预备党员入党思想汇报(范文)
2019/08/14 职场文书
Hive HQL支持2种查询语句风格
2022/06/25 数据库