前言

使用脚本进行下载的需求很常见,可以是常规文件、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 下载的九种方法相关推荐

  1. python os复制文件_用Python复制文件的九种方法

    以下是演示"如何在Python中复制文件"的九种方法. shutil copyfile()方法 shutil copy()方法 shutil copyfileobj()方法 shu ...

  2. python安装bs4几种方法_Python安装Bs4的多种方法

    安装方法一: ①进入python文件夹执行指令(前提是支持pip指令): pip3 install Beautifulsoup4 ②回车待安装完成,如果出现以下红框中内容,即代表安装成功 ③验证是否可 ...

  3. pca算法python代码_三种方法实现PCA算法(Python)

    主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...

  4. python画图-python画图的两种方法

    python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 1 安装turtle Python2安装命令:pip install turtule Python3 ...

  5. Python文本处理几种方法

    Python文本处理几种方法 方法一:readline函数 #-*- coding: UTF-8 -*- f = open("D:\pythontest\splm_ugslmd.log&qu ...

  6. Python案例:两种方法实现词频统计

    Python案例:两种方法实现词频统计 一.利用字典实现词频统计 1.编写源代码 2.查看运行结果 二.利用collections的Counter模块实现词频统计 <

  7. 数据导出到excel文件给客户端下载的几种方法

    (原创)datagrid数据导出到excel文件给客户端下载的几种方法 看到这个觉得这个人很厉害,mvp啊. 我就改成这个样子了.  Response.Clear();         Respons ...

  8. SRA数据下载的3种方法

    第一步如何找到sra? 先去看文章 文章有对应的gse号,在geo里输入gse号.          翻页到最下面找到srp号         ####在sra网站搜索srp号 https://tra ...

  9. 加密Python代码的5种方法

    Python越来越热门了,2022年1月编程语言排行榜上挤进第一. Python优点很多,比如简单易学,代码量少,能做的事很多等等,和其他语言一样,Python也有一些不可掩盖的缺点,版本不兼容,运行 ...

最新文章

  1. 手机自带的显示基站命令
  2. [学习笔记]几个英语短句(1)
  3. mysql数据库-1.文件导入mysql表secure_file_priv报错问题解决 mysql select outfile不能导出亲测
  4. 【通俗易懂】C语言中,for循环中i++与++i的区别
  5. 在ubuntu 16.04上安装tensorflow,并测试成功
  6. WPF实现环(圆)形进度条
  7. DataFrame字符串之分割split()、清洗drop()、合并concat()、重新建立索引reset_index() - (Python)
  8. android 来电模式设置,android在root模式下接听来电的方法
  9. 杨辉三角——数组解决
  10. Golang Tips
  11. 卖肾换来一部iPhone后生活不能自理,那手机电商平台现在卖10块钱!
  12. jq+ajax前端上传多张图片_史上最轻量的前端框架-VanillaJS
  13. .net 2.0 只读TextBox取值问题
  14. java 边界_Java泛型中的上下边界的理解
  15. 【CASS精品教程】CASS 9.2绘制地籍图详细实验案例教程
  16. 网页三剑客8免费下载加序列号
  17. 微软windows10易升_Win10 如何摆脱易升这个流氓软件,如何拒绝每半年一次的大更...
  18. Java(58):maven test 运行特定单元测试类
  19. Visio连接线的箭头如何变为直线、双箭头;直线转换为箭头
  20. 扯ruan蛋的房价,恶心死了我

热门文章

  1. 《众妙之门——自由网站设计师成功之道》一1.4 自由网站设计师犯的严重错误...
  2. php中的empty和isset
  3. 修改LDAP查询默认1000条限制
  4. 关于Ubuntu 使用PPPoe拨号上网,导致wifi没有错误。
  5. 为啥总让我“先去博客园其他网站逛逛”?
  6. php 直接定义 和 construct,PHP _construct()函数讲解
  7. 【概念信息】成本中心计划
  8. 【MM模块】 External Services 外部服务
  9. 2017你该买房,还是卖房?
  10. PP管和PPR管的区别在哪