Python中的opener()方法是什么
当我们爬百度首页的时候, 当html使用时,我们使用它 urlopen 打开请求,这是一个特殊的opener(即模块帮助我们构建)。但基本的 urlopen() 该方法不支持其他HTTP/HTTPS高级功能,如代理、cookie等,因此需要使用 Python 的 opener 定义我们的请求内容。

具体步骤:
(1)使用相关的 Handler处理器 创建特定功能的处理器对象;
(2)然后通过 build_opener()使用这些处理器对象创建自定义opener对象的方法;
(3)使用自定义的opener对象,调用open()发送请求。
让我们先回顾一下使用情况 urlopen 获取百度首页 html 代码实例:
#导入urllib库
importurllib.request
#作为Request()方法的参数,url构建并返回Request对象
request=urllib.request.Request("http://www.baidu.com")
#作为urlopen()方法的参数,Request对象发送给服务器并接收响应
response=urllib.request.urlopen(request)
#类别文件对象支持文件对象的操作方法,如read()读取文件的所有内容,并返回字符串
html=response.read().decode("utf-8")
#打印字符串
print(html)接下来,让我们来看看它的使用 opener 处理方法:
fromurllibimportrequest
#构建HTTPHandler处理器对象,支持HTTP请求处理
http_handler=request.HTTPHandler()
#构建HTTPSHandler处理器对象,支持HTTPS请求的处理
#http_handler=request.HTTPSHandler()
#调用request.build_opener()方法,创建opener对象,支持处理HTTP请求
opener=request.build_opener(http_handler)
#构建Request请求
request=request.Request("http://www.baidu.com/")
#open()方法调用自定义opener对象,发送request请求
response=opener.open(request)
#获取服务器响应内容
html=response.read().decode("utf-8")
#打印字符串
print(html)在上面的第一段代码中,我们直接通过 import urllib.request 导入我们需要的包,这样当我们需要使用的时候 urllib.request 我们使用第二段代码 from urllib import request 导入我们需要的包,这样我们就可以直接使用它们 request 可以用。
相关推荐:Python视频教程
我们在前一篇文章中已经提到了第一段代码,这里就不多解释了。
我们使用了第二段代码 opener 处理我们的请求的方法,这样我们就可以成为代理,cookie 后续文章将讨论进一步操作。最终结果如下:

http_handler = request.HTTPHandler()我们也可以添加一个 debuglevel=1 参数将是Debug Log打开,这样程序在执行时,会在屏幕上自动打印收包和发包的报头,便于调试,有时可以省去抓包的工作。
代码如下:
fromurllibimportrequest
#构建HTTPHandler处理器对象,支持HTTP请求处理
http_handler=request.HTTPHandler(debuglevel=1)
#构建HTTPHandler处理器对象,支持HTTPS请求的处理
#http_handler=request.HTTPSHandler(debuglevel=1)
#调用request.build_opener()方法,创建opener对象,支持处理HTTP请求
opener=request.build_opener(http_handler)
#构建Request请求
request=request.Request("http://www.baidu.com/")
#open()方法调用自定义opener对象,发送request请求
response=opener.open(request)
#获取服务器响应内容
html=response.read().decode("utf-8")
#打印字符串
print(html)输出结果如下:

可以看出,响应结果将为我们打印并输出一些请求信息。
