目标:使用协程实现网络图片下载

思路

1.根据url地址请求网络资源

2.在本地创建文件准备保存

3.读取网络资源数据

4.把读取的网络资源写入到本地文件中

5.做异常捕获

代码

单线程下载:

import urllibdef download_img(imgUrl, fileName):# 根据url请求网络资源response_data = urllib.request.urlopen(imgUrl)# 在本地创建文件,准备保存with open(fileName, "wb") as file:while True:# 读取网络资源file_data = response_data.read(1024)# 判断读取的数据是否为空,不为空继续写,为则表示已经读到文件末尾,需跳出循环if file_data:# 写入本地文件file.write(file_data)else:breakdef main():# 要下载图片的路径img1Url = "https://www.qqpao.com/uploads/allimg/181116/10-1Q116102128.gif"img2Url = "https://uploadfile.huiyi8.com/2014/1107/20141107114402602.gif"img3Url = "https://media1.giphy.com/media/l41lXnhesd96Aa9os/giphy.gif"download_img(img1Url,"C:/Users/Desktop/1.gif")download_img(img2Url, "C:/Users/Desktop/2.gif")download_img(img3Url, "C:/Users/Desktop/3.gif")if __name__ == '__main__':main()

使用协程实现并发下载:

import urllib,gevent,requests
from gevent import monkey
monkey.patch_all()def download_img(imgUrl, fileName):try:# 根据url请求网络资源response_data = urllib.request.urlopen(imgUrl)# 在本地创建文件,准备保存with open(fileName, "wb") as file:while True:# 读取网络资源file_data = response_data.read(1024)# 判断读取的数据是否为空,不为空继续写,为则表示已经读到文件末尾,需跳出循环if file_data:# 写入本地文件file.write(file_data)else:breakexcept Exception as e:print("文件 %s 下载失败! %s" % (fileName,e))else:print("文件 %s 下载成功!" % (fileName))def main():# 要下载图片的路径img1Url = "https://www.qqpao.com/uploads/allimg/181116/10-1Q116102128.gif"img2Url = "https://uploadfile.huiyi8.com/2014/1107/20141107114402602.gif"img3Url = "https://media1.giphy.com/media/l41lXnhesd96Aa9os/giphy.gif"gevent.joinall([gevent.spawn(download_img, img1Url, "C:/Users/Desktop/1.gif"),gevent.spawn(download_img, img2Url, "C:/Users/Desktop/2.gif"),gevent.spawn(download_img, img3Url, "C:/Users/Desktop/3.gif"),])if __name__ == '__main__':main()

python 并发下载器相关推荐

  1. python编写下载器可暂停_python 并发下载器实现方法示例

    本文实例讲述了python 并发下载器实现方法.分享给大家供大家参考,具体如下: 并发下载器 并发下载原理 from gevent import monkey import gevent import ...

  2. python视频下载-python动态视频下载器的实现方法

    这里向大家分享一下python爬虫的一些应用,主要是用爬虫配合简单的GUI界面实现视频,音乐和小说的下载器.今天就先介绍如何实现一个动态视频下载器. 爬取电影天堂视频 首先介绍的是python爬取电影 ...

  3. python编写下载器可暂停_Python编写一个优美的下载器

    本文实例为大家分享了python编写下载器的具体代码,供大家参考,具体内容如下 #!/bin/python3 # author: lidawei # create: 2016-07-11 # vers ...

  4. python音乐下载器安装_python实现音乐下载器

    本文实例为大家分享了python音乐下载器的具体代码,供大家参考,具体内容如下 import requests import urllib import json from tkinter impor ...

  5. python并发下载

    python并发下载 多线程爬虫 ​ 多线程爬虫请求内容速度过快,可能会造成服务器过载,或者是IP地址被封禁.为了避免出现这种情况,我们需要给爬虫设置一个delay延迟标识,设定请求同一个域名的时候的 ...

  6. python小说下载器_python 制作网站小说下载器

    基本开发环境 · Python 3.6 · Pycharm 相关模块使用 目标网页分析 输入想看的小说内容,点击搜索 这里会返回很多结果,我只选择第一个 网页数据是静态数据,但是要搜索,是post请求 ...

  7. python tkinter下载器_下载小说还要去找网站?Python使用tkinter打造一个小说下载器...

    前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...

  8. python动态视频下载器

    这里向大家分享一下python爬虫的一些应用,主要是用爬虫配合简单的GUI界面实现视频,音乐和小说的下载器.今天就先介绍如何实现一个动态视频下载器. 爬取电影天堂视频 首先介绍的是python爬取电影 ...

  9. Python Tkinter 下载器 多任务下载+多线程下载+多任务断点续存

    功能介绍: 这次的下载器特点:多线程下载 + 多任务下载 + 多任务断点续存 视频演示: Python Tkinter 系列 - 下载器 界面: 轮子 文件大小 界面:Tkinter 下载功能 :re ...

最新文章

  1. C# WInForm中 窗体的this.width和this.height的属性值不能大于显示器的最大分辨率
  2. 什么叫优雅降级和渐进增强
  3. Xamarin.Android之封装个简单的网络请求类
  4. SAP CRM WebClient UI上以html格式显示note的问题讨论
  5. AtCoder 2305 [AGC010D] Decrementing(博弈)
  6. mysql 字段操作
  7. Python数据分析中Groupby用法之通过字典或Series进行分组
  8. Jquery—Jquery异步功能实例
  9. Python UDP broadcast PermissionError: [Errno 13] Permission denied
  10. 转动惯量到底是个什么物理量
  11. c语言结构体memcmp,用memcmp()比较结构体
  12. Maven配置pom引入本地依赖
  13. 使用命令行登陆Mysql
  14. vs2017配置linux连接器失败,Xilinx HLx 2017.1与VS 2017兼容问题解决的方法盘点
  15. 效率源大容量硬盘检测修复程式 v3.0 光盘版 怎么用
  16. 【transformer】航空发动机寿命预测
  17. 简单舒服新UI装逼制作神器微信小程序源码下载支持多种流量主
  18. Oracle中TO_DATE TO_CHAR格式
  19. 【系统分析师之路】2010年系统分析师下午案例分析真题
  20. 记录人生中第一次中勒索病毒

热门文章

  1. 关于B树的学习总结和B+树,B*树的简介
  2. css 背景色透明且渐变且不影响文字颜色
  3. 小猿圈讲解Linux常见的版本
  4. 某H考研:计算机考研难度大学排行榜
  5. php面向对象(OOP)—什么是面向对象
  6. 中文 NLP(11) -- stanfordNLP 生成文法之 PCFG 模型
  7. C语言实现-----网络通信
  8. c语言单片机实训心得体会,单片机实训心得体会_单片机实习感悟与收获
  9. 第四届金陀螺奖投票总数超过100W,四大类奖项TOP10实力上榜!
  10. SHA1加密算法(spring boot)