Python爬虫常用库之requests详解

在使用了urllib库之后,感觉很麻烦,比如获取个cookie都需要分几步,代码又多,这和python的风格好像有点不太像哈,那有没有更加容易点的请求库呢?答案是有的,那就是第三方库requests,这个库的作者是大名鼎鼎的kennethreitz,创作这个库的原因就是想让python开发者更加容易地发起请求,处理请求。里面还有个名字:HTTP for Humans,顾名思义,就是用来请求http的。想看源代码的可以在github上搜索他的名字就可以看到了。

接下来介绍下怎样用这个库吧!

因为这是第三方库,所以我们需要下载,需要在命令行输入

pip install requests

如果你装的是anaconda的忽略这条

安装好了就来进行使用吧

  进行简单的操作

发送一个get请求

 

Python爬虫常用库之requests详解

这样就发送了一个get请求,并且还打印了返回的内容,这个不再需要知道网页是哪个编码的,不过有时会出现编码问题,但是你也可以指定编码类型,如:

response.encoding ='utf-8'

指定完成后就可以正常编码了,前提你得知道网页的编码类型。

出了上面这些,我们还可以获取下面的信息

 

Python爬虫常用库之requests详解

是不是觉得很容易,一行代码就可以了。不再需要几步代码什么的了。

接下来被发爬的话带上个请求头来进行请求

 

Python爬虫常用库之requests详解

加个请求头也就是加个关键字参数而已

还可以进行带参数的get请求

 

Python爬虫常用库之requests详解

那如果需要登陆呢?post请求怎样发?告诉你,照样很简单

 

Python爬虫常用库之requests详解

是不是很简单,也是加个data关键字参数,把要提交的登陆参数进行post上去。

那除了上面的两个请求,还能进行别的请求吗?我可以非常开心地告诉你,可以的。比如,你要发个put请求,如这样

 

Python爬虫常用库之requests详解

这个就是发送put请求和delete请求的,其他的请求也是这样发送,就不一 一说了。

  进行复杂点的请求

在登陆的时候我们有时候需要输入验证码,那怎样输呢?爬虫的看不了网页,最简单的做法就是把这个验证码的图片下载下来然后手动输入,那么我们怎样下载呢?我们可以向这个图片的url发送请求,然后把返回内容以二进制方法存入文件里面就可以了。

代码如下:

 

Python爬虫常用库之requests详解

还是很简单,不得不说,这个库太好用了。

当我们需要上传文件的时候,比如图片,我们还可以用post方法把他发送出去

 

Python爬虫常用库之requests详解

 

获取cookie并简单处理一下

 

Python爬虫常用库之requests详解

当网页返回内容是json格式是,我们不需要用json库来解析,我们可以直接利用requests的方法进行解析,两者的效果是一样的

 

Python爬虫常用库之requests详解

在urllib库时保存登陆信息需要把cookie保存下来,但是在requests库里面,我们只需要用requests.session()来保存信息就可以了。

 

Python爬虫常用库之requests详解

这样就可以保存登陆了,不需要为cookie操心了,但是每次获取一个session就可以了,然后用来请求或者其他操作。不需要每次请求或者操作都创建一个sesion出来,这样是保存不了登陆信息的

当一个网站不安全,需要你用证书验证的,比如这个网站

https://www.12306.cn

Python爬虫常用库之requests详解

这时要访问里面的网站内容,我们就需要进行验证,代码如下

 

Python爬虫常用库之requests详解

这样就可以进行访问了,但是会有一条警告

 

Python爬虫常用库之requests详解

觉得不美观的,我们还可以在请求时加个cert关键字参数,值为可信任的证书,为一个元组,写上账号和密码之类的,这里就不演示了

遇到需要认证的网站,我们也可以这样

 

Python爬虫常用库之requests详解

由于我找不到需要认证的网站,所以就不演示了。

requests还可以用代理ip来进行请求网站来防止ip被封以至于自己爬不了的尴尬。使用代理ip也比urllib库简单得多,代码如下:

 

Python爬虫常用库之requests详解

上面的字典格式需要一 一对应,然后在请求时加上个关键字参数proxies就可以了。

  请求异常处理

在程序运行时,遇到错误时程序就会被强行停止,如果想要继续运行,就需要进行捕捉异常来让程序继续运行。

在requests库中有个处理异常的库requests.exceptions

这里简单地处理下请求超时的处理情况

 

Python爬虫常用库之requests详解

这里捕捉了三个异常,因为ReadTimeout是ConnectionError的子类,所以先捕捉ReadTimeout,再捕捉父类的。而ConnectionError 和 RequestException 同理

更多的异常处理可以查看文档哈。

  最后

以上均是我在学习时的笔记和个人在运用时遇到的一些坑都简单地记载了上去,希望对你有用哈,如果想看更多的用法可以去官方文档查看。