当我们爬取百度首页的 html时,我们用到的是 urlopen 来打开请求,它是一个特殊的opener(也就是模块帮我们构建好的)。但是基本的 urlopen() 方法不支持代理、cookie等其他的HTTP/HTTPS高级功能,所以我们需要用到 Python 的 opener 来自定义我们的请求内容。

具体步骤:

(1)使用相关的 Handler处理器 来创建特定功能的处理器对象;

(2)然后通过 build_opener()方法使用这些处理器对象,创建自定义opener对象;

(3)使用自定义的opener对象,调用open()方法发送请求。

我们先来回顾一下使用 urlopen 获取百度首页的 html 代码实例:# 导入urllib 库

import urllib.request

# url 作为Request()方法的参数,构造并返回一个Request对象

request = urllib.request.Request("http://www.baidu.com")

# Request对象作为urlopen()方法的参数,发送给服务器并接收响应

response = urllib.request.urlopen(request)

# 类文件对象支持 文件对象的操作方法,如read()方法读取文件全部内容,返回字符串

html = response.read().decode("utf-8")

# 打印字符串

print(html)

接下来我们看一下使用 opener 的处理方式:from urllib import request

# 构建一个HTTPHandler 处理器对象,支持处理HTTP请求

http_handler = request.HTTPHandler()

# 构建一个HTTPSHandler 处理器对象,支持处理HTTPS请求

# http_handler = request.HTTPSHandler()

# 调用 request.build_opener()方法,创建支持处理HTTP请求的opener对象

opener = request.build_opener(http_handler)

# 构建 Request请求

request = request.Request("http://www.baidu.com/")

# 调用自定义opener对象的open()方法,发送request请求

response = opener.open(request)

# 获取服务器响应内容

html = response.read().decode("utf-8")

# 打印字符串

print(html)

在上面的第一段代码中,我们是通过直接 import urllib.request 来导入我们需要的包,这样当我们要使用时需要 urllib.request 来使用,第二段代码我们是通过 from urllib import request 来导入我们需要的包,这样当我们使用时直接 request 来使用就可以了。

第一段代码在前面的文章中我们已经说过了,这里就不多做解释了。

第二段代码中,我们使用了 opener 的方法来处理我们的请求,这样我们就可以对代理,cookie 等做进一步的操作,后续文章会讲到。最终结果如下:

在http_handler = request.HTTPHandler()中,我们还可以添加一个 debuglevel=1 参数,会将Debug Log打开,这样程序在执行的时候,会把收包和发包的报头在屏幕上自动打印出来,方便调试,有时可以省去抓包的工作。

代码如下:from urllib import request

# 构建一个HTTPHandler 处理器对象,支持处理HTTP请求

http_handler = request.HTTPHandler(debuglevel=1)

# 构建一个HTTPHandler 处理器对象,支持处理HTTPS请求

# http_handler = request.HTTPSHandler(debuglevel=1)

# 调用 request.build_opener()方法,创建支持处理HTTP请求的opener对象

opener = request.build_opener(http_handler)

# 构建 Request请求

request = request.Request("http://www.baidu.com/")

# 调用自定义opener对象的open()方法,发送request请求

response = opener.open(request)

# 获取服务器响应内容

html = response.read().decode("utf-8")

# 打印字符串

print(html)

输出结果如下:

可以看出在响应结果的时候会为我们打印输出一些请求信息。

python中opener_Python中的opener()方法是什么相关推荐

  1. 关于python中requests模块导入问题-python中requests模块的使用方法

    本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合 ...

  2. python的requests模块功能_python中requests模块的使用方法

    本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合 ...

  3. python模块的使用方法_python中requests模块的使用方法

    本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合 ...

  4. python模糊查找文件夹名字_python实现在目录中查找指定文件的方法

    本文实例讲述了python实现在目录中查找指定文件的方法.分享给大家供大家参考.具体实现方法如下: 1. 模糊查找 复制代码 代码如下: import os from glob import glob ...

  5. python找出值为nan_Python Numpy:找到list中的np.nan值方法

    这个问题源于在训练机器学习的一个模型时,使用训练数据时提示prepare的数据中存在np.nan 报错信息如下: ValueError: np.nan is an invalid document, ...

  6. 在Python中连接字符串的首选方法是什么?

    本文翻译自:Which is the preferred way to concatenate a string in Python? Since Python's string can't be c ...

  7. 在Python中检查类型的规范方法是什么?

    检查给定对象是否为给定类型的最佳方法是什么? 如何检查对象是否从给定类型继承? 假设我有一个对象o . 如何检查是否为str ? #1楼 前往雨果: 您可能是说list而不是array ,但这指向类型 ...

  8. python在坐标轴上画矩形_Python使用matplotlib实现在坐标系中画一个矩形的方法

    本文实例讲述了Python使用matplotlib实现在坐标系中画一个矩形的方法.分享给大家供大家参考.具体实现方法如下: import matplotlib.pyplot as plt from m ...

  9. kali查看python版本-kali中python版本的切换方法

    kali中python版本的切换方法 如下所示: update-alternatives --config python 一条简单的命令,如下图所示: 以上这篇kali中python版本的切换方法就是 ...

最新文章

  1. 音乐与现代计算机技术,计算机技术在音乐教学中应用与研究.doc
  2. centos+ffmpeg安装配置+切片
  3. 【转载】 C++中回车换行(\n\r)和换行(\r)的区别
  4. SENetSKNet 解读
  5. 【Git、GitHub、GitLab】三 Git基本命令之创建仓库并向仓库中添加文件
  6. python基础入门(10)之循环语句
  7. P1420 最长连号(python3实现)
  8. 【SVN】SVN 的使用新手指南,具体到步骤详细介绍----TortoiseSVN
  9. 火币生态链项目SuperNova与Poly Network达成战略合作
  10. Oracle中字符串转义问题总结
  11. ySQL性能优化的21个最佳实践 和 mysql使用索引
  12. 2021-09-13强化学 习 原理及技术介绍
  13. exoplayer实测播放dash流(二) dash+drm widevine加密流
  14. 腾讯云短信(个人记录)
  15. 最不起眼的基础知识,却成了你面试跨不过去的门槛
  16. 第1140期AI100_机器学习日报(2017-11-01)
  17. python同切圆_Python绘制同切圆和同心圆
  18. 参考文献格式详细解释和引用(常见)
  19. BurpSuite-Proxy使用
  20. 安卓手机连接IP100蓝牙打印机实现打印功能

热门文章

  1. 深入剖析TikTok零播放问题,并附解决方案
  2. VR看房是怎么做出来的呀?
  3. 解决报错RecursionError: maximum recursion depth exceeded in comparison
  4. 机器学习不神秘!手把手教你用R语言打造文本分类器
  5. 东大22春教育管理学X《教育管理学》在线平时作业2满分非答案
  6. python安装失败0x80070570_0x80070570 文件或目录损坏且无法读取解决方法
  7. 从联想一体机浅谈中国制造
  8. c/c++游戏编程之控制台贪吃蛇(二)
  9. oracle addm报告分析,Oracle addm
  10. 阿里巴巴亿级流量—蚂蚁金服分布式事务实践解析