Python 下载的九种方法
前言
使用脚本进行下载的需求很常见,可以是常规文件、web页面、Amazon S3和其他资源。Python 提供了很多模块从 web 下载文件。下面介绍
一、使用 requests
requests 模块是模仿网页请求的形式从一个URL下载文件
示例代码:
import requestsurl = 'xxxxxxxx' # 目标下载链接
r = requests.get(url) # 发送请求
# 保存
with open ('r.txt', 'rb') as f:f.write(r.content)f.close
二、使用 wget
安装 wget 库
pip install wget
示例代码
import wgeturl = '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 库进行下载,只需加一个参数就可以
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import requestsurl = '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 requestsurl = '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 = urlr = 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
下载
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import requests
from clint.textui import progessurl = 'xxxxxxxxxxx'
r = requests.get(url, stream=True)
with open('x.txt', 'wb') as ftotal_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()
七、使用 urllib 模块下载
urllib库是Python的标准库,因此不需要安装它。
下载代码
urllib.request.urlretrieve(URL, PATH)
八、通过代理下载
因为一些众所周知的原因我们下载国外的资源会非常的慢,这时候可以使用代理的方式进行下载
requests 模块使用代理
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import requests# 定义代理,假设本机上有个梯子的服务,代理端口是2258
proxy = {'http': 'http://127.0.0.1:2258'} url = 'xxxxxx'
r = requests.get(url, proxies=proxy )
.......
urllib 模块使用代理
import urllib.requesturl = '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 os复制文件_用Python复制文件的九种方法
以下是演示"如何在Python中复制文件"的九种方法. shutil copyfile()方法 shutil copy()方法 shutil copyfileobj()方法 shu ...
- python安装bs4几种方法_Python安装Bs4的多种方法
安装方法一: ①进入python文件夹执行指令(前提是支持pip指令): pip3 install Beautifulsoup4 ②回车待安装完成,如果出现以下红框中内容,即代表安装成功 ③验证是否可 ...
- pca算法python代码_三种方法实现PCA算法(Python)
主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...
- python画图-python画图的两种方法
python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 1 安装turtle Python2安装命令:pip install turtule Python3 ...
- Python文本处理几种方法
Python文本处理几种方法 方法一:readline函数 #-*- coding: UTF-8 -*- f = open("D:\pythontest\splm_ugslmd.log&qu ...
- Python案例:两种方法实现词频统计
Python案例:两种方法实现词频统计 一.利用字典实现词频统计 1.编写源代码 2.查看运行结果 二.利用collections的Counter模块实现词频统计 <
- 数据导出到excel文件给客户端下载的几种方法
(原创)datagrid数据导出到excel文件给客户端下载的几种方法 看到这个觉得这个人很厉害,mvp啊. 我就改成这个样子了. Response.Clear(); Respons ...
- SRA数据下载的3种方法
第一步如何找到sra? 先去看文章 文章有对应的gse号,在geo里输入gse号. 翻页到最下面找到srp号 ####在sra网站搜索srp号 https://tra ...
- 加密Python代码的5种方法
Python越来越热门了,2022年1月编程语言排行榜上挤进第一. Python优点很多,比如简单易学,代码量少,能做的事很多等等,和其他语言一样,Python也有一些不可掩盖的缺点,版本不兼容,运行 ...
最新文章
- 手机自带的显示基站命令
- [学习笔记]几个英语短句(1)
- mysql数据库-1.文件导入mysql表secure_file_priv报错问题解决 mysql select outfile不能导出亲测
- 【通俗易懂】C语言中,for循环中i++与++i的区别
- 在ubuntu 16.04上安装tensorflow,并测试成功
- WPF实现环(圆)形进度条
- DataFrame字符串之分割split()、清洗drop()、合并concat()、重新建立索引reset_index() - (Python)
- android 来电模式设置,android在root模式下接听来电的方法
- 杨辉三角——数组解决
- Golang Tips
- 卖肾换来一部iPhone后生活不能自理,那手机电商平台现在卖10块钱!
- jq+ajax前端上传多张图片_史上最轻量的前端框架-VanillaJS
- .net 2.0 只读TextBox取值问题
- java 边界_Java泛型中的上下边界的理解
- 【CASS精品教程】CASS 9.2绘制地籍图详细实验案例教程
- 网页三剑客8免费下载加序列号
- 微软windows10易升_Win10 如何摆脱易升这个流氓软件,如何拒绝每半年一次的大更...
- Java(58):maven test 运行特定单元测试类
- Visio连接线的箭头如何变为直线、双箭头;直线转换为箭头
- 扯ruan蛋的房价,恶心死了我
热门文章
- 《众妙之门——自由网站设计师成功之道》一1.4 自由网站设计师犯的严重错误...
- php中的empty和isset
- 修改LDAP查询默认1000条限制
- 关于Ubuntu 使用PPPoe拨号上网,导致wifi没有错误。
- 为啥总让我“先去博客园其他网站逛逛”?
- php 直接定义 和 construct,PHP _construct()函数讲解
- 【概念信息】成本中心计划
- 【MM模块】 External Services 外部服务
- 2017你该买房,还是卖房?
- PP管和PPR管的区别在哪