2015.3.6

 urllib2的使用方法大致如下

# 定制Handler处理函数
opener = urllib2.build_opener(ProxyHandler, HTTPHandler)
urllib2.install_opener(opener)
 
# 定制URL参数
request = urllib2.Request()
request.add_headers(xxx)
 
# 打开URL,返回file-like对象
response = urllib2.urlopen(req)
 
# 获得结果
print response.read()
 

关键的处理机制分析

 

urlopen()

是处理的入口函数。
获取  OpenerDirector 对象,调用 Opener.open()。
默认的OpenerDirector 对象保存在变量 _open中。
采用了Singleton模式。

 

build_opener()

是一个对象工厂函数,创建OpenerDirector对象。
内部提供了默认的handler列表,函数传入的handler参数取代默认的handlers。
调用OpenerDirector.add_handler()函数,注册handlers。先注册默认的handler,再注册定制的handler。按照在参数中的顺序进行注册。

 
install_opener()
将OpenerDirector对象保存到变量_opener中,作为默认opener使用。
 

class OpenerDirector

采用了Composite模式。
add_handler():注册handler对象到内部列表中。
open():调用handler列表中每个对象的open方法,触发处理操作。
 

class Request

作为一个信息对象,保存和url相关的参数,包括headers、data、proxy等。用于url参数的传递。

 
class HTTPHandler
类继承关系:BaseHandler -> AbstractHTTPHandler -> HTTPHandler
调用 httplib.HTTPConnection 完成 HTTP的处理。

Python urllib2 模块学习笔记的更多相关文章

  1. Python requests模块学习笔记

    目录 Requests模块说明 Requests模块安装 Requests模块简单入门 Requests示例 参考文档   1.Requests模块说明 Requests 是使用 Apache2 Li ...

  2. Python shutil 模块学习笔记

    学于https://automatetheboringstuff.com shutil 名字来源于 shell utilities,有学习或了解过Linux的人应该都对 shell 不陌生,可以借此来 ...

  3. Python keyword 模块 -- 学习笔记

    keyword 的帮助文档 >>> import keyword >>> help(keyword) Help on module keyword: NAME ke ...

  4. Python 日期时间处理模块学习笔记

    来自:标点符的<Python 日期时间处理模块学习笔记> Python的时间处理模块在日常的使用中用的不是非常的多,但是使用的时候基本上都是要查资料,还是有些麻烦的,梳理下,便于以后方便的 ...

  5. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  6. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

  7. Python Built-in Function 学习笔记

    Python Built-in Function 学习笔记 1. 匿名函数 1.1 什么是匿名函数 python允许使用lambda来创建一个匿名函数,匿名是因为他不需要以标准的方式来声明,比如def ...

  8. python - argparse 模块学习

    python - argparse 模块学习 设置一个解析器 使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数.那么当你的程序运行时,该解析器就可以用于处理命令行参数. 解 ...

  9. python paramiko模块学习分享

    python paramiko模块学习分享 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Sola ...

随机推荐

  1. Helpers\Number

    Helpers\Number This helper has 2 methods for converting a number format and to get a percentage. Num ...

  2. SMI接口,SMI帧结构,MDC/MDIO

    转载:http://blog.csdn.net/zyboy2000/article/details/7442464 SMI全称是串行管理接口(Serial Management Interface). ...

  3. 把旧的项目改变名称重新部署到tomcat下发现项目名称还是原来的项目名称,解决方案

    选中项目右键点击properties 在type file text 中输入web 选择web在右边可以看到web-context-root 把里面的项目名称改成你最新的就ok了

  4. C#动态引用DLL的方法

    C#编程中,使用dll调用是经常的事,这样做的好处是非常多的,比如把某些功能封装到一个dll中,然后主程序动态调用这个dll. 废话不多说,举例说明如下. 首先,我们需要封装一个dll,vs2008下 ...

  5. Mysql 死锁相关操作

    该随笔随时记录日常工作中遇到的关于mysql的死锁相关问题 1)查看mysql当前的处理线程(connection) mysql> show processlist; 2)杀掉对应的connec ...

  6. DedeCMS更新文章同步发布到新浪微博

    如果在网站推广过程中能利用好微博这个工具的话,将会给网站的推广工作带来巨大的便利.下面以dede程序为例讲讲如何将网站内容自动同步到新浪微博. 在新浪微博的工具中有个自动关联博客的功能,利用好这个功能 ...

  7. (转)TCP三次握手

    原文地址:http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TC ...

  8. MongoDB - Introduction to MongoDB, Documents

    MongoDB stores data records as BSON documents. BSON is a binary representation of JSON documents, th ...

  9. TSQL基础(二)

    over() 开窗函数 排名函数必须和over()一起使用,所以先了解over(). OVER 子句定义查询结果集内的窗口或用户指定的行集. 然后,开窗函数将计算窗口中每一行的值. 您可以将 OVER ...

  10. linux umount 提示device is busy 的解决

    linux umount 提示"device is busy" 终极解决 为了干净地关闭或热交换 UNIX 或类 UNIX 系统上的存储硬件,必须能够卸载使用此设备上的存储的所有文件系统.但是,如果正 ...