urllib2源码解读一(开篇)
开始有读urllib2源码的这个想法是在某个午饭后的时光,刷了会微博发现:与其无聊的刷微博,不如找点源码读,想了想,就找到urllib2。
原因是urllib2这个模块是从一开始写python到很久以后都会用到的东西,我想大多数人都会有这样的感觉,因为它很好用,而且python也会经常用来写爬虫。使用频率这么高的东西,自然要把它彻底掌握才好。
这段时间有空就会看看urllib2的源码,里面可以学习的东西还真不少,也有些值的借鉴的思想,比如关于一系列handler处理的操作。另外里面还用了个设计模式,应该是command模式。这些东西以后慢慢分析。
首先说下这里面个需要关注的几个对象:
1、build_opener:
用来构建处理器(handlers),建造一些默认的或者通过参数传递进来的handler到openerdirector中待用。
2、 openerdirector:
在其中,建立process_request和process_response两个字典,根据添加时handler中的方法来将handler分别放入两个字典中,其中的key是handler的协议(如HTTPHandler,就是http),调用openerdirctor的open方法时会首先调用process_request字典中对应协议的handler进行处理,然后处理之后的结果在通过processs_response字典中的handler进行处理,最终返回数据。
3、request对象:
在调用openerdirector中的open方法时会先根据传入的url构建request对象。这个对象的内容主要是这个url的协议(http或者https),还有会对url进行分解,参数处理,域名处理等等一系列的动作。
上面三个是在后面的分析中都会用到的,这里就先大概有个印象,下篇开始到代码内部穿梭。
[补充]
觉得篇文章没有起到给大家一个整体概念的作用,这里再补充下。
大体的一个流程就是,在使用urllib2.urlopen(url)的时候,首先就是由build_opener来构建一个OpenerDirector实例,构建的过程其实就是将一些列handler处理器放入到OpenerDirector的属性中,然后调用OpenerDirector的open方法,这个方法首先会根据你的url以及data参数生成一个Request对象,Request根据是否有data这个数据来确定是发送get请求还是post请求。
有了Request之后,就会经过之前被添加到OpenerDirector的属性中的那些handler来处理,最后处理成一个response对象。这个response类似于文件对象,有read、readline、readlines等方法。
大概流程就是这样。
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:胡阳 来源: the5fire的技术博客
- 标签: urllib2
- 发布时间:2012-12-06 13:51:35
- [47] IOS安全–浅谈关于IOS加固的几种方法
- [46] 如何拿下简短的域名
- [46] Oracle MTS模式下 进程地址与会话信
- [46] 图书馆的世界纪录
- [43] 【社会化设计】自我(self)部分――欢迎区
- [42] 读书笔记-壹百度:百度十年千倍的29条法则
- [42] android 开发入门
- [41] 界面设计速成
- [39] 视觉调整-设计师 vs. 逻辑
- [36] Go Reflect 性能