技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 源码分析 --> urllib2源码解读一(开篇)

urllib2源码解读一(开篇)

浏览:2771次  出处信息

开始有读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等方法。

大概流程就是这样。

建议继续学习:

  1. urllib2源码解读二(简单的urlopen)    (阅读:1620)
  2. urllib2源码解读三(探索OpenerDirector的add_handler)    (阅读:1502)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1