注意:python 3 环境下的 urllib 库,将 urlopen、urlretrieve、quote 等实用函数统一封装在 urllib.request 下。

在可使用的各种网络函数库中,功能最为强大的可能是 urllib 和 urllib2 了。通过它们在网络上访问文件,就好像访问本地文件一样。通过一个简单的函数调用(urlopen),几乎可以把任何 url 所指向的东西作为程序的输入。想象一下,如果将这两个模块和 re 模块结合使用的效果:可以下载 web 页面,提取信息,以及自动生成报告等。

  • urlencode:将字典型的请求参数配置,编码为url能够识别的形式;

    >> request_paras = {'reportTime': '2017-12-31','pageNum': 1}
    >> urlencode(paras)
    'reportTime=2017-12-31&pageNum=1'
    >> url = 'http://s.askci.com/stock/a/?' + urlencode(request_paras)
    >> url
    'http://s.askci.com/stock/a/?reportTime=2017-12-31&pageNum=1'
    >>
    

0. url 中的中文:quote、unquote

  • 来看百度上野树里吧的首页 url:http://tieba.baidu.com/f?kw=��Ұ����&fr=ala0&loc=rec&traceid=,kw所对的(��Ұ����)无疑就是上野树里转码后的字符串表示,我们尝试将其解码成中文姓氏:

    >> from urllib.parse import quote, unquote
    >> s = '%C9%CF%D2%B0%CA%F7%C0%EF'
    >> unquote(s)'��Ұ����'# 却是无法显示的乱码,这是因为 urllib 默认的编码解码都是 utf-8,而百度采用的编码为 gbk
    >> unquote(s, encoding='gbk')
    '上野树里'
    
  • 下面我们来构造,新垣结衣的百度贴吧首页 url:

    >> s = '新垣结衣'
    >> decode_s = quote(s, encoding='gbk')
    >> decode_s
    '%D0%C2%D4%AB%BD%E1%D2%C2'
    >> construct_url = 'http://tieba.baidu.com/f?kw=' + decode_s + '&fr=ala0&loc=rec&traceid='
    http://tieba.baidu.com/f?kw=%D0%C2%D4%AB%BD%E1%D2%C2&fr=ala0&loc=rec&traceid=
    

1. urllib.urlopen():打开远程文件

>>> from urllib import urlopen
>>> webpage = urlopen('http://www.python.org')

可以像打开本地文件一样打开远程文件,不同之处在于只能使用只读模式,使用来自 urllib 的 urlopen 而不是 file 或者 open。

urlopen 返回的类文件对象(instance)支持 close/read/readline/readlines方法。

2. urllib.urlretrieve():获取远程文件

>>> from urllib import urlretrieve
>>> urlretrieve('http://www.python.org', '/root/workspaces/python_webpage.html')

urlopen 返回一个能从中读取数据的类文件对象(instance)。如果希望 urllib 为你下载文件并在本地文件中存储一个文件的副本,则可以使用 urlretrive。

从 url 上加载数据到本地:

if (not os.path.isfile(dataset)) and dataset == 'mnist.pkl.gz':origin = 'http://www.iro.umontreal.ca/~lisa/deep/data/mnist/mnist.pkl.gz'print 'Downloading data from %s' % originurllib.urlretrieve(origin, dataset)

3. 下载进度

  • 如下的函数作为 urlretrieve 的 reporthook 命名参数的回调函数,

    def download_report(count, block_size, total_size):downloaded = count * block_sizepercent = 100. * downloaded / total_sizepercent = min(100, percent)print('downloaded %d, %.2f%% completed' % (downloaded, percent))
    
  • 查看 urlretrieve 源码发现,total_size 根据 Content-length 获取,如果未获得该参数,则 total_size 默认传参为 -1:

    ![这里写图片描述](https://img-blog.csdn.net/20180624141228819?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhbmNodW5odWk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

4. quote/quote_plus

除了通过 URL 读取和下载文件,urllib 还提供了一些函数操作 URL 本身,

  • quote(string[, safe])。返回一个字符串,其中所有的特殊字符(这些字符在 URL 中有特殊含义)都已被对 URL 友好的字符所代替。safe 字符串包含了不应该采用这种方式编码的字符,默认的是/

    • parse.quote('~')%7E
    • parse.quote(':')%3A
  • quote_plus(string[, safe]),功能和 quote 差不多,但用+号代替空格
  • unquote(string),和 quote 相反
  • unquote_plus(string),和 quote_plus相反

##4. parse_qs/parse_qsl

>> from urllib.parse import parse_qs
>> my_values = parse_qs('red=5&blue=0&green=', keep_blank_values=True)
>> print(repr(my_values))
{‘red’: [‘5’], ‘green’: [”], ‘blue’: [‘0’]}

如果 url 的 query 中有同一个 key 对应多个 value,其中 parse_qs() 可以把该相同 key 的 value 放在一个 list 中。

Python 标准库 —— urllib(下载进度)相关推荐

  1. Python标准库—urllib和urllib3

    一.urllib urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urllib.urllib中一共有四个模块,分 ...

  2. Python标准库介绍

    1. 关于Python标准库 众所周知,Python是一个依赖强大的组件库完成对应功能的语言,为了便捷实现各项功能,前辈大牛们打造了多种多样的工具库公开提供给大众使用,而越来越多的库已经因为使用的广泛 ...

  3. 转--Python标准库之一句话概括

    作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...

  4. 超全汇总!200 多个 Python 标准库介绍

    关于Python标准库 众所周知,Python是一个依赖强大的组件库完成对应功能的语言,为了便捷实现各项功能,前辈大牛们打造了多种多样的工具库公开提供给大众使用,而越来越多的库已经因为使用的广泛和普遍 ...

  5. Python 标准库之 xml.etree.ElementTree xml解析

    Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...

  6. Python标准库asyncio模块基本原理浅析

    Python标准库asyncio模块基本原理浅析 本文环境python3.7.0 asyncio模块的实现思路 当前编程语言都开始在语言层面上,开始简化对异步程序的编程过程,其中Python中也开始了 ...

  7. python第三方库排行-140种Python标准库、第三方库和外部工具

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  8. python基本使用-Python标准库详细介绍与基本使用方式,超详细!

    目录: Python 标准库概览概览 操作系统接口 os 模块提供了很多与操作系统交互的函数: 应该用 import os 风格而非 from os import *.这样可以保证随操作系统不同而有所 ...

  9. 以下属于python标准库的选项是-Python 标准库一览(Python进阶学习)

    转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...

最新文章

  1. 使用xdebug+wincachegrind的心得
  2. J2EE的13个规范总结
  3. Leet Code OJ 20. Valid Parentheses [Difficulty: Easy]
  4. linux 测试vim编译器_软件测试工程师必须要掌握的linux命令
  5. Django框架——HttpResponse对象
  6. CVPR2005【行人检测】HOG+SVM用于人体检测的梯度方向直方图
  7. 再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署...
  8. java后端技术有哪些_Java后端精选技术:什么是JVM?
  9. 【JavaScript】javaScript基础知识回顾
  10. 在linux系统上启动oracle的服务
  11. Python-C语言语法解析:pycparser模块
  12. JAVA—socket编程
  13. ps----高低频磨皮--------中性灰磨皮-----------双曲线磨皮
  14. Eclipse打开资源管理器
  15. 如何理解概率论中的“矩”?
  16. HH的项链(树状数组)区间内不同的数量
  17. 华硕(ASUS)路由器AP模式设置教程
  18. Linux下安装配置使用python虚拟环境
  19. webView加载白屏
  20. 校园二手交易android软件 基于AndroidStudio

热门文章

  1. get_json_object与json_tuple 的解析
  2. Kafka如何做到全局有序
  3. python安装selenium报错_新手用Python运行selenium的常见问题
  4. c语言16位字节只能用到255,《C语言程序设计》月考试题(第三章).doc
  5. html页面的盒子边框怎么做的,HTML+CSS入门 用三层盒子结构实现多边框详解
  6. pythoncopy函数_Python的shutil模块中文件的复制操作函数详解
  7. Python——KNN实战(附详细代码与注解)
  8. Learn OpenGL(二)——顶点输入(Vertex Input)
  9. C语言/C++基础知识代码整理
  10. 用“归并”改进“快速排序”