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实现矩阵乘法的方法
Jun 28 Python
Python中的id()函数指的什么
Oct 17 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
python如何实现int函数的方法示例
Feb 19 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
python 日期排序的实例代码
Jul 11 Python
Python 经典算法100及解析(小结)
Sep 13 Python
Python语言异常处理测试过程解析
Jan 08 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Python yield生成器和return对比代码实例
Apr 20 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
May 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 $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
centos系统升级python 2.7.3
2014/07/03 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
2020/06/24 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
Python中pass的作用与使用教程
2020/11/13 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
写好自荐信的几个要点
2013/12/26 职场文书
求职意向书
2014/04/01 职场文书
节约用电标语
2014/06/17 职场文书
大学四年个人总结
2015/03/03 职场文书
小学六一主持词开场白
2015/05/28 职场文书
初中英语教学随笔
2015/08/15 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书