关于urllib的使用方法

urllib是python内置的HTTP请求库,包含了4个模块

  • request:这是最基本的HTTP请求模块,可以模拟请求的发送
  • error:异常处理模块。如果出现异常,那么我们可以捕获这些异常
  • parse:一个工具模块,提供了许多URL的处理方法
  • robotparser:主要是用来识别网站的robots.txt文件

那么我们先从request模块说起

request模块有一个最常用的方法:urlopen,那他是干哈的捏,其实就是我们最基础的爬虫,模拟浏览器的请求,具体怎么用嘞?话不多说,上代码!

4aad0663bc214b21bab4d1f1117c29ac.png

建议可以分别试试不用decode方法和用decode方法返回数据的区别

实际上,我们返回的response是一个HTTPResponse对象,这一点可以通过输出type(response)来验证,我这里就不演示了。既然返回的是一个对象,那相应的就会有一些方法,所以下面我演示一下一些常用的方法,废话不多说,上代码!

d6a6643148914e5a84668867fdb44312.png

具体参数的含义可以看我文章:爬虫中关于network中返回参数的各个含义https://blog.csdn.net/qq_52046196/article/details/141337128?spm=1001.2014.3001.5501

 看到这里,恭喜你,urlopen的最基础的使用方法你已经学会了。接下来我们要扩展一下用法:

讲解之前我们需要了解一下urlopen方法的API,也就是可填入参数有哪些

61919edfc55349e9bc7eaa56403c578e.png

挺多的对吧,但是这里我们只需要记住三个常用的参数:

  • url:就是我们之前使用过的填入要访问的网址
  • data:如果说我们要传入数据,就会使用到data参数
  • timeout:设置超时时间,单位为秒,意思是如果我们访问的网址响应时间超出我们设置的时间,那么就会抛出异常,如果没有设置,就用全局默认时间

由于我们上面已经介绍过了url的使用,所以这里就不再次介绍了

data参数用法

6ddedb36a02a4b508c4e16c620c3ccd4.png

timeout用法:

65c45aa050e34debb634a96a95c7c5c2.png

以上就是urllib.request模块中urlopen的使用方法,但是这样的话真的就够了吗 no~ no~ no~

仅仅使用这个方法是没办法构建一个完整的请求的,比如加入Header的请求头信息,那要怎么办呢,谁来救救我。千呼万唤始出来,你的强来了,他就是Request 类

首先我们需要先了解这个类的一些参数,这里我们重点讲解headers,method参数

ae2d6d2426884b06a96e7d27c3e704c2.png

那这些参数怎么用捏,老规矩,上代码!

7154f48f4a7c4e67bd43630be1f95c26.png

其实Request的作用就是方便我们构建请求,发送请求,但是其实主要作用就是使用headers这个参数,后续可以用这个参数实现UA伪装,其余的其实都差不多(我感觉)

如果不知道什么是UA伪装可以看我之前的文章:

爬虫中关于network中返回参数的各个含义https://blog.csdn.net/qq_52046196/article/details/141337128?spm=1001.2014.3001.5501

Request说:我来组成头部(一个不太好笑的笑话hhh)属实给我写累了,开个不太好笑的笑话放松一下

好的我们继续:

介绍完了request的两个方法urlopen,Request,现在我们来介绍更高级的方法

Handler,这个是个啥捏,可以理解为一个处理器,然后这个Handler是一个统称,可以有很多种Handler,他们的作用各不相同,比如:

  • HTTPDefaultErrorHandler:用于处理HTTP响应错误的,所有错误都会抛出HTTPError类型的异常
  • HTTPCookieProcessor:用于处理Cookie
  • HTTPPasswordMgr:用于管理密码,维护这用户名 密码的对照表
  • HTTPBasicAuthHandler:用于管理认证,如果一个链接打开需要认证,那么可以用这个类来解决问题

要了解Handler的用法,我们还要了解他的好兄弟,Opener,他们之间有啥关♂系呢,以及他们怎么用的捏,我来用代码说明,来人!上代码,上代码啊啊啊啊!!!

bee6b0c92ee0438eb9ab5aa5b66d5771.png

呼!总算搞定urllib中request模块的比较常用的一些类或者方法了,当然其中穿插着一些parse模块的用法,我真的要写吐了,呕呕呕,但是你以为这篇就算完了吗,别急,还有一个模块 (这里不展开讲robotparser模块的用法了,一是用得不多,二是我真写不下去了!!!后续真用上再来更新这篇文章吧)

oh no,突然发现还有个没写,又回来补,靠,以为终于写完了,天杀的Cookie

上代码!!!

38da4be67047407fbb54fba9a601f5e1.png

大家如果对这块代码的注释看不太懂的话,可以看上个代码那块的注释,结合起来理解,其实原理都差不多的,如果是无法理解程序的流程的话,建议可以倒着来理解(代码从后往前看):获取响应 -> 保存在handler中 -> handler将数据传给cookie -> 遍历cookie,这段代码中其实可以不用创建一个变量来保存请求的结果,但是不写的话总感觉少点啥,就先写上吧

还有个就是以文本形式保存cookie,其实就比上面的代码多几行,上代码!

5d2663d502f04313a571dd893df27497.png

接上文,既然可以存储,那可以读取吗,当然可以

 c6b4c67d9ac246ad86a4446177426389.png

当然,这里的MozillaCookieJar也可以换成LWPCookieJar,表示以LWP格式存储文件

谁!是谁!没错,他就是 error 模块

别担心,学完了request模块之后,error模块就会简单很多,当然error本来也比较简单,

error包括两个类

  • URLError类:来自urllib的error模块,继承自OSError类,由request模块产生的异常都可以捕获这个类来处理,他有一个reason属性,可以返回错误的原因,其实主要是处理访问网址出现的一些报错

咋用捏,来人!再上代码!!!

de02eec4daf5463a8afd0d6b5530c986.png

这个就有个好处:程序没有直接报错,而是正常运行且输出了一个结果,这样可以避免程序运行终止,且我们异常可以得到有效的处理,而不是程序运行报错,弹出来一堆英文,还要找半天。大家可以试试用异常处理和不用异常处理的区别,我这里就不展开讨论了

  • HTTPError:他是URLError的子类,专门用来处理HTTP请求错误,例如认证请求失败,有三个属性   
  1. code:返回HTTP状态码
  2. reason:同父类一样,返回错误原因
  3. headers:返回请求头

   怎么用捏,来人,来人啊,哦,没人了,我来上代码!!!

             88f7180b383c4ba79b6c3471fd29b119.png

有个细节注意一下啊,由于HTTPError是URLError的子类,我们可以先捕获子类的错误信息,再捕获父类的报错信息,俗话说,子不教父之过嘛,这样就减少了代码的运行量,因为很大程度报错都在子类上,如果子类实在没错,再从父类中找,又是一个极小的细节

还有个模块:parse,主要是对URL的一些操作,我感觉后期可以用其他的方式替代,这里就不展开讲解了 

-------------------------------------------------完结撒花-----------------------------------------------------------

 

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值