python爬虫入门教程之三——Requests库的介绍以及基本用法

Python kingmo888 682℃ 0评论

Requests与urllib

  本博主以前在学习Python爬虫的时候,接触到的很多python的爬虫教程都是python2时代的作品,脱节严重的同时教程中大多使用urllib、urllib2等相对底层的HTTP模块,而且urllib与urllib2经常需要结合使用,上手难度比较高,唯一的好处就是python原生自带模块,同时这些模块在Python2和Python3中不是向下兼容的,存在很大的差异,旧版本脚本升级是很麻烦的。

  Requests库就非常优雅,虽然不是原生python模块,但Anaconda环境中已经把该库集成好了。如果自己安装也非常简单,只需要使用以下命令即可:

pip install requests

  作为 GitHub上关注数最多的 Python 项目之一,使用的是 urllib3,继承了urllib2的所有特性。requests实现了 HTTP协议中绝大部分功能,它提供的功能包括 Keep-Alive、连接池、Cookie持久化、内容自动解压、HTTP代理、SSL认证、连接超时、Session等很多特性,最重要的是它同时兼容 python2 和 python3。同时,

  • Requests对于HEAD, POST, PUT, PATCH, 和 DELETE方法的api同样简单
  • 它可以处理多部分上传,同样支持自动转码
  • 文档更好
  • 还有更多

  值得注意的是,网络上有种言论是因为requests不支持异步,所以不推荐使用,仔细看这些文章会发现基本出自同一人之手因为最初python这方面相关教程的太少,使得大家竞相转载而已。实际上,python3异步的库无论是原生库还是第三方库有的是,可以很轻易的将requests转为异步。

查看所安装Requests的版本

>>> import requests

>>> requests.__version__

'2.20.1'

常用的Requests方法及说明

请求URL:GET

当我们导入requests模块之后就可以使用get命令来获取网页了,我们以博主自己的博客为例,测试一下:

>>> import requests

>>> response = requests.get('http://www.lizenghai.com/')

请求url之后,我们可以通过response.status_code或者response.ok命令来查看是否访问成功,而网页的具体内容则可以通过方法response.content.decode()来获取,其中decode是用于解析内容编码的,如果网页编码格式是gb2312之类的,需要decode('gbk'),如果是utf8,则需要decode('utf-8')传入不同的参数。当参数为空时,默认为当前脚本的编码格式:\

当对象response的属性.status_code代表网页的htpp状态码,爬虫在抓取过程中经常遇到的的状态码有以下几种:

200:一切正常,网页资源正常获取到。

500:如果在网页上会提示Bad Request,表示网页服务器返回给请求端的错误提示,提示请求端修复请求信息。

500:Internal Server Error,网页服务器方面的问题,在爬虫抓取网站的过程中如果过快、被禁止等,会引发该类问题。表示服务器限制了客户端的访问。

404("Not Found") 和410("Gone"):表示请求的网页资源不存在。

301:重定向,请求的url呗重新定向到了另外一个url请求,通常需要请求端向另外一个url发送get请求才能得到所需要的网页资源。

传递URL的参数

与后面要将到的post方式请求url相比,通过在url上添加参数也是网页服务器的设计之一,具体使用哪种方式是有网站程序来控制。最经典、使用率最高的就是百度搜索了,百度搜索就是典型的通过url来传递搜索词和其他变量的,当然,也有一些post的内容在此处用不到暂时不展开讲。

用百度搜索一下,此处以关键词 “Python量化投资 lizenghai"为例,

可以看到其中wd是关键词,wd的具体值中空格变成了%20,这是url转码导致的,在我们传递url参数时,有时候也需要这样的处理。

我们试着用requests来传递参数,目标地址:https://www.baidu.com/s,构造一个参数字典:

>>> params = {'wd':'Python量化投资 lizenghai'}

>>> response = requests.get('https://www.baidu.com/s', params=params)

>>> print(response.url)

https://www.baidu.com/s?wd=Python%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84+lizenghai

可以看到,url已经传递了参数过来。浏览器访问该链接时中文讲自动解析。

注:此处可能网页内容无法或许到,因为我们访问的是https,需要ssl证书,此后的教程中我会讲到该部分内容。

请求URL:POST

前面讲到传递url参数时提到post方法,post方法就是url保持不变而具体的请求变量内容以post的形式发送过去。可以直接理解为将url中的参数改到了post的data中,post还有一个好处是当传递的内容很长时,通过url是无法发送的(有最大长度),post就没问题。而且,除了用于登录,像图片上传、文件上传,发表文章、论坛发帖顶贴等也基本使用的是post方法。

这里我以登录wordpress的博客后台来举例,后台地址:http://www.lizenghai.com/wp-login.php

构造一个post的form Data,

postdata = {
'log': 'XXXXXXXXXXXX',
'pwd': 'XXXXXXXXXXXX',
'wp-submit': '登录',
'redirect_to': 'http://www.lizenghai.com/wp-admin/',
}

执行post命令,

response = requests.post(url, data=postdata)

查看取得的网页内容,

response.content.decode()

如果登录成功,应该进入wp的仪表盘后台。如下图圈起来的地方,源码部分已经有仪表盘显示,说明我们登录成功了!

以上就是requests库的基础用法。

转载请注明:Python量化投资 » python爬虫入门教程之三——Requests库的介绍以及基本用法

喜欢 (2)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址