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 相关文章推荐
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Python中endswith()函数的基本使用
Apr 07 Python
详解python单例模式与metaclass
Jan 15 Python
详解Python如何生成词云的方法
Jun 01 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
使用Python和Scribus创建一个RGB立方体的方法
Jul 17 Python
python 实现识别图片上的数字
Jul 30 Python
Python 使用list和tuple+条件判断详解
Jul 30 Python
什么是Python中的匿名函数
Jun 02 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 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
日本十大惊悚动漫
2020/03/04 日漫
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
两个开源的Php输出Excel文件类
2010/02/08 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
动态样式类封装JS代码
2009/09/02 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
python使用urlparse分析网址中域名的方法
2015/04/15 Python
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
python实现文本文件合并
2015/12/29 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
Python决策树分类算法学习
2017/12/22 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
商场总经理岗位职责
2014/02/03 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
2014年纠风工作总结
2014/12/08 职场文书
人生遥控器观后感
2015/06/11 职场文书