python中opener_Python中的opener()方法是什么
当我们爬取百度首页的 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()方法是什么相关推荐
- 关于python中requests模块导入问题-python中requests模块的使用方法
本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合 ...
- python的requests模块功能_python中requests模块的使用方法
本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合 ...
- python模块的使用方法_python中requests模块的使用方法
本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合 ...
- python模糊查找文件夹名字_python实现在目录中查找指定文件的方法
本文实例讲述了python实现在目录中查找指定文件的方法.分享给大家供大家参考.具体实现方法如下: 1. 模糊查找 复制代码 代码如下: import os from glob import glob ...
- python找出值为nan_Python Numpy:找到list中的np.nan值方法
这个问题源于在训练机器学习的一个模型时,使用训练数据时提示prepare的数据中存在np.nan 报错信息如下: ValueError: np.nan is an invalid document, ...
- 在Python中连接字符串的首选方法是什么?
本文翻译自:Which is the preferred way to concatenate a string in Python? Since Python's string can't be c ...
- 在Python中检查类型的规范方法是什么?
检查给定对象是否为给定类型的最佳方法是什么? 如何检查对象是否从给定类型继承? 假设我有一个对象o . 如何检查是否为str ? #1楼 前往雨果: 您可能是说list而不是array ,但这指向类型 ...
- python在坐标轴上画矩形_Python使用matplotlib实现在坐标系中画一个矩形的方法
本文实例讲述了Python使用matplotlib实现在坐标系中画一个矩形的方法.分享给大家供大家参考.具体实现方法如下: import matplotlib.pyplot as plt from m ...
- kali查看python版本-kali中python版本的切换方法
kali中python版本的切换方法 如下所示: update-alternatives --config python 一条简单的命令,如下图所示: 以上这篇kali中python版本的切换方法就是 ...
最新文章
- 音乐与现代计算机技术,计算机技术在音乐教学中应用与研究.doc
- centos+ffmpeg安装配置+切片
- 【转载】 C++中回车换行(\n\r)和换行(\r)的区别
- SENetSKNet 解读
- 【Git、GitHub、GitLab】三 Git基本命令之创建仓库并向仓库中添加文件
- python基础入门(10)之循环语句
- P1420 最长连号(python3实现)
- 【SVN】SVN 的使用新手指南,具体到步骤详细介绍----TortoiseSVN
- 火币生态链项目SuperNova与Poly Network达成战略合作
- Oracle中字符串转义问题总结
- ySQL性能优化的21个最佳实践 和 mysql使用索引
- 2021-09-13强化学 习 原理及技术介绍
- exoplayer实测播放dash流(二) dash+drm widevine加密流
- 腾讯云短信(个人记录)
- 最不起眼的基础知识,却成了你面试跨不过去的门槛
- 第1140期AI100_机器学习日报(2017-11-01)
- python同切圆_Python绘制同切圆和同心圆
- 参考文献格式详细解释和引用(常见)
- BurpSuite-Proxy使用
- 安卓手机连接IP100蓝牙打印机实现打印功能
热门文章
- 深入剖析TikTok零播放问题,并附解决方案
- VR看房是怎么做出来的呀?
- 解决报错RecursionError: maximum recursion depth exceeded in comparison
- 机器学习不神秘!手把手教你用R语言打造文本分类器
- 东大22春教育管理学X《教育管理学》在线平时作业2满分非答案
- python安装失败0x80070570_0x80070570 文件或目录损坏且无法读取解决方法
- 从联想一体机浅谈中国制造
- c/c++游戏编程之控制台贪吃蛇(二)
- oracle addm报告分析,Oracle addm
- 阿里巴巴亿级流量—蚂蚁金服分布式事务实践解析