用Python 的 opener 来自定义我们的请求内容
2019-08-01 本文已影响20人
我爱学python
具体步骤:
使用相关的Handler处理器来创建特定功能的处理器对象;
然后通过build_opener()方法使用这些处理器对象,创建自定义opener对象;
使用自定义的opener对象,调用open()方法发送请求。
我们先来回顾一下使用 urlopen 获取百度首页的 html 代码实例:

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

在上面的第一段代码中,我们是通过直接import urllib.request 来导入我们需要的包,这样当我们要使用时需要urllib.request 来使用,第二段代码我们是通过from urllib import request来导入我们需要的包,这样当我们使用时直接request来使用就可以了。
第一段代码在前面的文章中我们已经说过了,这里就不多做解释了。
第二段代码中,我们使用了 opener 的方法来处理我们的请求,这样我们就可以对代理,cookie 等做进一步的操作,后续文章会讲到。最终结果如下:

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

输出结果如下:

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