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多线程编程(四):使用Lock互斥锁
Apr 05 Python
使用Python监控文件内容变化代码实例
Jun 04 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
Python二叉树的镜像转换实现方法示例
Mar 06 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
Python程序控制语句用法实例分析
Jan 14 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
python 一维二维插值实例
Apr 22 Python
python3实现名片管理系统(控制台版)
Nov 29 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中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
python轻松查到删除自己的微信好友
2016/01/10 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
用python实现对比两张图片的不同
2018/02/05 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
python实现简单flappy bird
2018/12/24 Python
如何提高JDBC的性能
2013/04/30 面试题
大学生志愿者感言
2014/01/15 职场文书
2013年军训通讯稿
2014/02/05 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
竞聘书模板
2014/03/31 职场文书
财产公证书样本
2014/04/04 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
读群众路线的心得体会
2014/09/03 职场文书
质检员工作总结2015
2015/04/25 职场文书
呐喊读书笔记
2015/06/30 职场文书
python munch库的使用解析
2021/05/25 Python
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android