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最基本的操作字典的方法
Apr 24 Python
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
python获取外网ip地址的方法总结
Jul 02 Python
Python单链表简单实现代码
Apr 27 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
利用Python如何实现数据驱动的接口自动化测试
May 11 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
Python正则表达式指南 推荐
Oct 09 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
Python设计模式之状态模式原理与用法详解
Jan 15 Python
Python登录系统界面实现详解
Jun 25 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 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新建文件自动编号的思路与实现
2011/06/27 PHP
PHP文件操作方法汇总
2015/07/01 PHP
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
Python素数检测实例分析
2015/06/15 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
python实现感知器
2017/12/19 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
django表单的Widgets使用详解
2019/07/22 Python
Python数据库小程序源代码
2019/09/15 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
市三好学生主要事迹
2014/01/28 职场文书
yy司仪主持词
2014/03/22 职场文书
挂靠协议书
2015/01/27 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
python实现Nao机器人的单目测距
2021/09/04 Python
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB