python中open的用法,Python中open()

  python中open的用法,Python中open()

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

  具体步骤:

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

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

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

  我们先来回顾一下使用urlopen获取百度首页的html代码示例:

  #导入urllib库

  importurllib.request

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

  request=URL lib . request . request( http://www . Baidu.com )

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

  response=urllib . request . urlopen(request)

  # Class file对象支持file对象的操作方法,比如read()方法读取一个文件的所有内容并返回一个字符串。

  html=response.read()。解码(“utf-8”)

  #打印字符串

  Print(html)接下来,我们来看看使用opener的处理方法:

  fromurllibimportrequest

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

  http _ handler=请求。HTTPHandler()

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

  # http _ handler=请求。HTTPSHandler()

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

  opener=request . build _ opener(http _ handler)

  #构建请求请求

  请求=请求。请求( http://www.baidu.com/)

  #调用自定义打开器对象的open()方法来发送请求请求

  response=opener.open(请求)

  #获取服务器响应内容

  html=response.read()。解码(“utf-8”)

  #打印字符串

  Print(html)在上面的第一段代码中,我们通过直接导入urllib.request来导入我们需要的包,这样在我们想要使用的时候就需要urllib.request来使用。在第二段代码中,我们通过从urllib import request导入我们需要的包,这样当我们使用它的时候,就可以直接请求使用它了。

  相关:《Python视频教程》

  第一个代码在上一篇文章中已经提到了,这里就不解释了。

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

  在http _ handler=request . httphandler()中,我们还可以添加一个debuglevel=1的参数,该参数会打开调试日志,这样在程序执行时,会自动在屏幕上打印出接收包和发送包的头,方便调试,有时还省去了捕获包的工作。

  代码如下:

  fromurllibimportrequest

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

  http _ handler=请求。HTTPHandler(debuglevel=1)

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

  # http _ handler=请求。HTTPSHandler(debuglevel=1)

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

  opener=request . build _ opener(http _ handler)

  #构建请求请求

  请求=请求。请求( http://www.baidu.com/)

  #调用自定义打开器对象的open()方法来发送请求请求

  response=opener.open(请求)

  #获取服务器响应内容

  html=response.read()。解码(“utf-8”)

  #打印字符串

  打印(html)输出结果如下:

  可以看到,在回复结果时,会为我们打印出一些请求信息。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: