2019年翻新:

大家不要看opener啦,看requests吧opener有点过时了。

目录

一、openers和handlers的关系

二、对build_opener的源码分析

1、build_opener 的作用

2、使用默认的handlers应该怎么写?


一、openers和handlers的关系

(1)openers:opener可以想象成一瓶水的瓶盖,但是真正处理信息的是handler(水)

(2)handlers:解决问题,工作都由它完成。不同的handlers可以类比成用什么协议打开什么url。

二、对build_opener的源码分析

def build_opener(*handlers):"""Create an opener object from a list of handlers.The opener will use several default handlers, including supportfor HTTP, FTP and when applicable HTTPS.If any of the handlers passed as arguments are subclasses of thedefault handlers, the default handlers will not be used."""opener = OpenerDirector()default_classes = [ProxyHandler, UnknownHandler, HTTPHandler,HTTPDefaultErrorHandler, HTTPRedirectHandler,FTPHandler, FileHandler, HTTPErrorProcessor,DataHandler]if hasattr(http.client, "HTTPSConnection"):default_classes.append(HTTPSHandler)skip = set()for klass in default_classes:for check in handlers:if isinstance(check, type):if issubclass(check, klass):skip.add(klass)elif isinstance(check, klass):skip.add(klass)for klass in skip:default_classes.remove(klass)for klass in default_classes:opener.add_handler(klass())for h in handlers:if isinstance(h, type):h = h()opener.add_handler(h)return opener

剔除使用默认即default_class的情况。当我们把handlers作为参数传进来,我们称之为handler_can,原来的默认的叫handler_yuan,当handler_can传进来我们首先判断它是不是一个对象(type看起来很陌生?你可以笼统的想象成是object,反正它们俩就是一个是鸡一个是蛋,先有鸡还是先有蛋?)然后再判断是不是default_class的子类假如是的话就把它放到default_class里面把父类剔除,就跟开头注释所说的一样“如果作为参数传递的任何处理程序都是默认处理的子类,则不会使用默认类处理程序”

1、build_opener 的作用

要爬取的各种各样的网页,它们有一部填写需要验证码,有的需要cookie,还有更多许多高级的功能,它们会阻碍你爬,而我对于openurl单纯地理解就是打开网页。openurl打开一个网址,它可以是一个字符串或者是一个request对象。而build_opener就是多了handler,处理问题更专业,更个性化。

2、使用默认的handlers应该怎么写?

例子1:

request = urllib.request.Request(url,data, headers or {})
opener = self.opener or urllib.request.build_opener(urllib.request.ProxyHandler)

例子2:

opener1 = urllib.request.install_opener(opener)

urllib的build_opener相关推荐

  1. Python网络爬虫--urllib

    本篇随便记录学习崔庆才老师编著的<Python3 网络爬虫开发实战>以及urllib标准库使用 urllib库是Python内置的HTTP请求库,包含四个模块: request:最基本的H ...

  2. Python3 的urllib实例

    在Python3中合并了 urllib 和 urllib2, 统一命名为 urllib 了,我觉得这样更加合理了.让我们可以像读取本地文件一样读取WEB上的数据.封装了一个类,供以后方便使用吧!并附带 ...

  3. 自定义request_python3下urllib.request库之Handle处理器和自定义Opener

    python3下urllib.request库高级应用之Handle处理器和自定义Opener python3下urllib.request库高级应用之Handle处理器和自定义Opener 经过前面 ...

  4. 爬虫笔记(一)——快速使用urllib库

    本人以前用的都是python2.7,但看网上很多教程都是以python3为例的,所以便切换版本,导入urllib.lxml.beautifulsoup4等库. 下面介绍下两个版本对urllib库的区别 ...

  5. python爬虫 - Urllib库及cookie的使用

    lz提示一点,python3中urllib包括了py2中的urllib+urllib2.[python2和python3的区别.转换及共存 - urllib] 怎样扒网页? 其实就是根据URL来获取它 ...

  6. 八 web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用

    使用IP代理 ProxyHandler()格式化IP,第一个参数,请求目标可能是http或者https,对应设置 build_opener()初始化IP install_opener()将代理IP设置 ...

  7. python3 urllib代理_Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)

    我们可以利用urllib来抓取远程的数据进行保存哦,以下是python3 抓取网页资源的多种方法,有需要的可以参考借鉴. 1.最简单 import urllib.request response = ...

  8. python urllib.request 爬虫 数据处理-python 爬虫之 urllib库

    文章更新于:2020-03-02 注:代码来自老师授课用样例. 一.初识 urllib 库 在 python2.x 版本,urllib 与urllib2 是两个库,在 python3.x 版本,二者合 ...

  9. pythonurllib模块-urllib库详解 --Python3

    相关:urllib是python内置的http请求库,本文介绍urllib三个模块:请求模块urllib.request.异常处理模块urllib.error.url解析模块urllib.parse. ...

最新文章

  1. ORB_SLAM2程序入口(System.cc)
  2. 别在 Java 代码里乱打日志了,这才是正确的打日志姿势!
  3. [置顶]       jQuery乱谈(六)
  4. mustache语法 转自小花大方
  5. 程序员交流平台_「建议收藏」10个适合程序员逛的在线社区
  6. JasperReport和iReport的java集成大全
  7. java socket调试工具_SocketToolV1.0-Java网络TCP调试助手
  8. 51单片机秒表设计c语言版,51单片机秒表系统的设计
  9. 【Chatbot】2:中文聊天机器人的实现
  10. 千兆路由器怎么设置网速最快_千兆路由器体验:速度简直太快了
  11. 计算机中安装杀毒软件 的作用,360杀毒软件的功能及其使用方法介绍
  12. 真香!微软办公环境大揭秘!
  13. sfm-learner学习心得
  14. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个
  15. 听音室-HIFI入门之400多张发烧碟中选出的精品
  16. Excel开发帮助文档查看方法
  17. 秒速五厘米(为情怀而补的题)
  18. pda扫码相关的打印机,用蓝牙连接打印,斑马打印机,zsu
  19. 对Slim 框架进行总结
  20. MySQL:由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题

热门文章

  1. element-ui生成自定义主题
  2. [firefox浏览器插件]记录一下自己经常用的插件
  3. 铁路 12306 的架构太牛了!
  4. VBR一次編碼 v.s 二次編碼(VBR 1-pass vs 2-pass)
  5. 利用fastcopy 定时同步目录
  6. unity用image做按钮,实现点击按钮,切换文字
  7. 2020年高教社杯全国大学生数学建模竞赛C题 第二问详细解答+代码
  8. 设置linearlayout最大高度_标识不得超过招牌总长2/3,这个城市出台招牌设置标准...
  9. 预装Windows 10的电脑改装成 Win7 系统的参考教程
  10. 有个运营妹纸心算找不到数独答案,心一横干脆写代码实现