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中IPYTHON入门实例
May 11 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
Python3中条件控制、循环与函数的简易教程
Nov 21 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
python3爬取数据至mysql的方法
Jun 26 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
python requests抓取one推送文字和图片代码实例
Nov 04 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
keras中的backend.clip用法
May 22 Python
python实现简单遗传算法
Sep 18 Python
Python标准库之typing的用法(类型标注)
Jun 02 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
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
php实现微信支付之退款功能
2018/05/30 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
python del()函数用法
2013/03/24 Python
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python threading模块操作多线程介绍
2015/04/08 Python
Python模块WSGI使用详解
2018/02/02 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
客服实习的个人自我鉴定
2013/10/20 职场文书
护理专业优质毕业生自荐书
2014/01/31 职场文书
校庆接待方案
2014/03/18 职场文书
中学生评语大全
2014/04/18 职场文书
十八大演讲稿
2014/05/22 职场文书
信息工作经验交流材料
2014/05/28 职场文书
生日宴会策划方案
2014/06/03 职场文书
学校志愿者活动总结
2014/06/27 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
教师工作表现自我评价
2015/03/05 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
如何使用python包中的sched事件调度器
2022/04/30 Python