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编写简单文件夹内图片浏览工具
Aug 17 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
python用户管理系统
Mar 13 Python
python的内存管理和垃圾回收机制详解
May 18 Python
python多线程下信号处理程序示例
May 31 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
Zend 输出产生XML解析错误
2009/03/03 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
js图片处理示例代码
2014/05/12 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
vue的for循环使用方法
2019/02/12 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
使用python实现省市三级菜单效果
2016/01/20 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
浅谈Django的缓存机制
2018/08/23 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
对于Python深浅拷贝的理解
2019/07/29 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
春节活动策划方案
2014/01/24 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
安全温馨提示语大全
2015/07/14 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技