python网络爬虫学习笔记(一)Request库 一、Requests库的基本说明 二、HTTP协议简介 三、Requests库函数详解

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解


引入Rquests库的代码如下

import requests

库中支持REQUEST, GET, HEAD, POST, PUT, PATCH, DELETE共7个方法。其中REQUEST方法为基础方法,其它六种方法均通过调用REQUEST方法实现。为了编写程序的便利性,提供了这额外6个方法。我们首先看一下这6个方法的含义,及其在库中对应的函数:

  • GET:请求指定的页面信息,对应requests.get()
  • HEAD:只请求页面的头部,对应requests.head()
  • POST:请求服务器接收所指定的文档作为对所标识的URI的新的从属实体,对应requests.post()
  • PUT:从客户端向服务器取代指定的文档的内容,对应requests.put()
  • PATCH:与PUT功能类似,不同之处在于PUT提交信息的方式是截断的,而PATCH可以进行局部更新。因此与PUT相比,在某些情况下,PATCH可以节省网络带宽。对应requests.patch()
  • DELETE:请求服务器删除指定页面,对应requests.delete()

Requests库支持以下6种访问异常:

  • ConnectionError:网络连接错误异常,如DNS查询失败、拒绝连接等
  • HTTPError:HTTP错误异常
  • URLRequired:URL缺失异常
  • TooManyRedirects:超过最大重定向次数,产生重定向异常
  • ConnectTimeout:连接远程服务器超时异常
  • Timeout:请求URL超时,产生超时异常

二、HTTP协议简介


HTTP(Hypertext Transfer Protocol),指超文本传输协议。这一一种基于“请求与相应”模式的无状态的应用层协议(工作在TCP协议之上)。所谓“无状态”,是指多次请求之间并没有关联。HTTP协议采用URL作为定位网络资源的标识,其格式如下:

http://host[:port][path]

  • host:合法的Internet主机域或IP地址
  • port:端口号,缺省为80
  • path:请求资源的路径

HTTP协议对资源的操作方法即为Requests库支持的6个方法(GET, HEAD, POST, PUT, PATCH, DELETE)。

三、Requests库函数详解


3.1 requests.request()

request()函数接受的参数如下:

requests.request(method, url, **kwargs)

其中method为请求方式,对应为'GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'delete', 'OPTIONS'七种方式。

**kwargs为13个可选的控制访问方式,包括:

  • params:字典或字节序列,可以作为参数增加到url中
  • data:字典、字节序列或文件对象,作为Request的内容
  • json:JSON格式的数据,作为Request的内容
  • headers:字典,为HTTP定制头
  • cookies:字典或CookieJar,Request中的cookie
  • auth:元组类型,支持HTTP认证功能
  • files:字典类型,用于传输文件
  • timeout:设定超时时间(以秒为单位)
  • proxies:字典类型,设定访问代理服务器,可以增加登录认证
  • allow_redirects:True/False,默认为True,为重定向开关
  • stream:True/False,默认为True,获取内容立即下载开关
  • verify:True/False,默认为True,认证SSL证书开关
  • cert:本地SSl证书路径

通过几段运行实例来理解控制访问参数:

params:字典或字节序列,可以作为参数增加到url中。

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

data的格式为字典、字节序列或文件对象,作为Request的内容。

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

headers格式为字典,可以为HTTP定制头。

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

files为字典类型,可用于传输文件。

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

proxies为字典类型,设定访问代理服务器,可以增加登录认证。

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

掌握了request(),对接下来的封装函数的理解就十分简单了。

3.2 requests.get()

此方法最为常用。最简单的用法即为

r=requests.get(url)

此处,get()构造了一个向服务器请求资源的Request对象(在Requests库内部生成)。函数返回一个包含服务器所有相关资源Response对象

get()函数完成的参数列表如下

requests.get(url, params = None, **kwargs)
  • url:逆获取页面的url链接
  • params:在url中增加的额外参数,格式为字典或者字节流,此参数是可选的
  • **kwargs:其它12个控制访问的参数,也是可选的

正如前文所述,从get()的如下封装源代码可以看出,它是调用request()来封装的。

def get(url, params = None, **kwargs):
    kwargs.setdefault('allow_redirects', True)
    return request('get', url, params = params, **kwargs)

下面我们来看一段运行实例。

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

其中,status_code是Response对象的属性之一。Response对象比较重要的几项属性罗列如下:

  • status_code:HTTP请求的返回状态,e.g.200表示成功,404表示失败
  • text:HTTP相应内容的字符串形式,即url对应的页面内容
  • encoding:从HTTP header中猜测响应内容的编码方式
  • apprent_encoding:从内容分析出的响应内容编码方式(备选编码)
  • content:HTTP响应内容的二进制形式

基于此,我们给出爬取网页的一个通用代码框架:

import requests

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "exception detected"

if __name__ == "__main__":
    url = "http://www.baidu.com"
    print(getHTMLText(url))

其中,raise_for_status()方法可以判断返回的Response对象是否出现异常。如果返回状态不是200,产生requests.HTTPError。

3.3 requests.head()

head()的参数列表如下:

requests.head(url, **kwargs)

其中**kwargs为13个控制访问参数,同request()。

head()的含义如前所述,通过一段运行实例可以更好地理解。

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

从实例中看到,运用head()爬取了百度首页的头部信息。但是如果我们想要得到网页文本内容,返回值则为空。

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

3.4 requests.post()

post()参数列表如下:

requests.post(url, data = None, json = None, **kwargs)

其中,**kwargs为其余11个控制访问参数。

下面来比较两段运行实例:

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

事实上,当下我们向URL post一个字典时,会自动被编码为form(表单)。

 3.5 requests.put()

requests.put(url, data=None, **kwargs)

其中,**kwargs为其余12个控制访问参数。

下面是一段运行实例:

python网络爬虫学习笔记(一)Request库
一、Requests库的基本说明
二、HTTP协议简介
三、Requests库函数详解

3.6 requests.patch()

requests.patch(url, data=None, **kwargs)

**kwargs为其余12个控制访问参数。

3.7 requests.delete()

requests.delete(url, **kwargs)

url为拟删除页面的ur链接。**kwargs为13个控制访问参数。

相关内容为笔者根据中国大学MOOC网站嵩天教授的python爬虫课程所撰写的学习笔记,感谢中国MOOC学习平台提供的学习资源与嵩老师的授课。