python 网络下载的三种风格 未完成
import osimport timeimport sys import requests#依序下载POP20_CC = ('CN IN US ID BR PK NG BD RU JP' 'MX PH VN ET EG DE IR TE CD TR').split()BASE_URL = 'http://flupy.org/data/flags'DEST_DIR = 'downloads/' def save_flag(img, filename): path = os.path.join(DEST_DIR, filename) if not os.path.isdir(DEST_DIR): os.mkdir(DEST_DIR) with open(path, 'wb') as fp: if fp.writable(): fp.write(img) def get_flag(cc):#下载内容 url = '{}/{cc}/{cc}.gif'.format(BASE_URL, cc=cc.lower()) # 格式化字符串{BASE_URL}/{cc}/{cc} print(url) resp = requests.get(url)#以二进制形式下载 return resp.content#返回二进制数据 def show(text): print(text,end=' ') sys.stdout.flush()#在liunx系统下,不加这句,打印时间不是立刻打印的。假如在windows中不存在这个问题(正常情况遇到换行才会刷新stdout缓冲) def download_many(cc_list): for cc in sorted(cc_list):#sorted()这个排序的结果和作用是什么? image=get_flag(cc) show(cc) save_flag(image,cc.lower()+'.gif') return len(cc_list) def main_n(download_many): t1=time.time() count=download_many(POP20_CC) elapsed=time.time()-t1 msg='\n{} flags download in {:.2f}s' print(msg.format(count,elapsed)) if __name__ == '__main__': main_n(download_many)#BD BR CD CN DE EG ET ID IN IR JPMX NG PH PK RU TE TR US VN# 19 flags download in 8.57s #concurrent.futures 模块下载
from concurrent import futuresimport osimport timeimport requestsimport sys MAX_WORKERS = 20POP20_CC = ('CN IN US ID BR PK NG BD RU JP' 'MX PH VN ET EG DE IR TE CD TR').split()BASE_URL = 'http://flupy.org/data/flags'DEST_DIR = 'downloads/' def save_flag(img, filename): path = os.path.join(DEST_DIR, filename) if not os.path.isdir(DEST_DIR): os.mkdir(DEST_DIR) with open(path, 'wb') as fp: if fp.writable(): fp.write(img) def get_flag(cc): url = '{}/{cc}/{cc}.gif'.format(BASE_URL, cc=cc.lower()) resp = requests.get(url) return resp.content def show(text): print(text, end=' ') sys.stdout.flush() def main_n(download_many): t1 = time.time() count = download_many(POP20_CC) elapsed = time.time() - t1 msg = '\n{} flags download in {:.2f}s' print(msg.format(count, elapsed)) def download_one(cc): image = get_flag(cc) show(cc) save_flag(image, cc.lower() + '.gif') return cc def download_many(cc_list): workers = min(MAX_WORKERS, len(cc_list)) # 设置最大线程数 with futures.ThreadPoolExecutor(workers) as executor: res = executor.map(download_one, sorted(cc_list)) return len(list(res)) # BD BR CN ID EG JPMX IN NG RU TE ET CD IR PH PK VN DE US TR# 19 flags download in 2.44sif __name__ == '__main__': main_n(download_many)
python 网络下载的三种风格 未完成的更多相关文章
- [转]VMware Workstation网络连接的三种模式
经常要使用VMWare Workstation来在本地测试不同的操作系统,以前也搞不清楚网络连接三种模式,最近看了几篇文章才算明白.现总结如下: 1. VMware Workstation的虚拟网络组 ...
- python实现单例模式的三种方式及相关知识解释
python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singlet ...
- Python实现定时执行任务的三种方式简单示例
本文实例讲述了Python实现定时执行任务的三种方式.分享给大家供大家参考,具体如下: 1.定时任务代码 import time,os,sched schedule = sched.scheduler ...
- Python格式化输出的三种方式
Python格式化输出的三种方式 一.占位符 程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式比如要求用户输入用户名和年龄,然后打印如下格式:My name is xxx,my age ...
- 辛星跟您玩转vim第一节之vim的下载与三种模式
首先值得一提的是,我的vim教程pdf版本号已经写完了,大家能够去下载,这里是csdn的下载地址:点此下载 ,假设左边的下载地址挂掉了,也能够自行在浏览器以下输入例如以下地址进行下载:http://d ...
- python字符串连接的三种方法及其效率、适用场景详解
python字符串连接的方法,一般有以下三种:方法1:直接通过加号(+)操作符连接website=& 39;python& 39;+& 39;tab& 39;+& ...
- Python 列表(List) 的三种遍历(序号和值)方法
三种遍历列表里面序号和值的方法: 最近学习python这门语言,感觉到其对自己的工作效率有很大的提升,特在情人节这一天写下了这篇博客,下面废话不多说,直接贴代码 #!/usr/bin/env pyth ...
- 记住 Python 变量类型的三种方式
title: 记住变量类型的三种方式 date: 2017-06-11 15:25:03 tags: ['Python'] category: ['Python'] toc: true comment ...
- python更新数据库脚本三种方法
最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 import MySQ ...
随机推荐
- js 监听浏览器刷新还是关闭事件 - 转
监听页面关闭: window.onbeforeunload = function() { //鼠标相对于用户屏幕的水平位置 - 窗口左上角相对于屏幕左上角的水平位置 = 鼠标在当前窗口上的水平位置 v ...
- Structs复习 Action传递参数
Structs传递参数通常有三种方式 下面我来一个个介绍 1.属性 Jar包 web.xml <?xml version="1.0" encoding="UTF-8 ...
- (转) 为什么选择.NETCore?
https://www.cnblogs.com/xiaoliangge/p/8373100.html 为什么选择.NETCore? 为什么选择.NETCore? 学习新的开发框架是一项巨大的投资 ...
- windows安装xgboost
https://blog.csdn.net/leo_xu06/article/details/52300869 参考部分共同安装的部分: https://www.cnblogs.com/kongcon ...
- vue路由传参
console.log( _this.$route.params.id)接收参数 <div class="baoming"><router-link :to=&q ...
- perl5
1.perl包加入环境 export PERL5LIB=/export/personal1/wanglh/.software/perl/lib:$PERL5LIB
- express 中间件
[express 中间件] 中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 ...
- Spring设置动态定时任务
1.在Spring中经常会用到定时任务,一般会在业务方法上使用@Schedule(cron="定时执行规则"),无法实现从前台动态设置定时任务. 在java中固定频率的任务使用Sc ...
- EF CodeFirst学习笔记002--更新数据库表
BlogEntities这个类从DbContext继承,负责数据库的更新. Database.SetInitializer(new DropCreateDatabaseIfModelChanges&l ...
- 解决ie浏览器下载apk或ipa变为zip
Tomcat/conf/web.xml <mime-mapping> <extension>apk</extension> <mime-type>app ...