Python网络爬虫之Requests库

来源:互联网 发布:科目一考试软件 编辑:程序博客网 时间:2024/05/29 17:25

        Requests库是Python的第三方库,是公认的最好的网络爬取的库。本文将对Requests库的学习(MOOC中国大学课程)做一个总结,对Requests库做一个全面的解释。以下的讲解按照如下的目录顺序进行,所有内容在不断的学习和更新中。

1.Requests库的功能介绍

2.Requests库的安装

3.Requests库的7种常用方法

   3.1最基础的方法—request()方法

        3.1.1 method访问请求方法

        3.1.2 **kwrgs控制访问参数类型

   3.2最常用的方法—get()方法

   3.3其他的常用5种方法

1.Requests库的功能介绍

按照我个人的理解,Requests库是Python的一个第三方库,主要的功能是让人们可以提取网页的内容,通过HTTP协议获取网络上的资源,侧重点在于获取资源和提交资源。该库本身不包含对资源的解析和应用。更多资料可以参考Reuqests库的官方网址。

2.Requests库的安装                      

在完成Python的安装之后,Python的安装可以参照【Python安装详细步骤】

即可使用pip快读进行Python各个库的安装,在开始按钮中搜索cmd,并用用管理员身份打开cmd命令行窗口

使用如下的pip安装命令完成Requests库的安装

pip install requests

3.Requests库的7种常用方法         

3.1最基础的方法——requests( )方法

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

其中

method是请求方法,对应get/put、post等7种

URL是拟获取页面的链接

**kwargs是访问控制参数,共13个

以下分别做介绍

3.1.1method访问请求方法

method的7中请求方法与HTTP协议的7中访问方式对应,分别是GET、HEAD、POST、PUT、PATCH、delete、OPTIONS.

r = requests.request('GET',url,**kwrgs)r = requests.request('HAED',url,**kwrgs)r = requests.request('POST',url,**kwrgs)r = requests.request('PUT',url,**kwrgs)r = requests.request('PATCH',url,**kwrgs)r = requests.request('DELETE',url,**kwrgs)r = requests.request('OPTIONS',url,**kwrgs)  #向服务器获取客户端和服务器间通信的相关参数

为了更好的理解method访问请求方法,我们需要首先理解HTTP协议,因为HTTP协议的访问请求方法与此处的method请求方法基本一致。

HTTPHypertext Transfer Protocol超文本传输协议:它是一种基于“请求与响应”模式的、无状态的应用层协议。用户发起请求,服务器做相应的响应,无状态是指前一次请求和后一次请求没有关联。HTTP协议分为两个主要部分:①URL,②HTTP协议对资源的操作方法。简单来说,HTTP其实就是请求资源与获得资源的过程,其中URL是起到定位资源的作用,而②提供对资源的操作方法。①和②结合起来就能组成HTTP协议的主要结构。

①HTTP协议规定URL格式http://host[:port][path]。host是合法Internet主机域名或IP地址;port是端口号,可以省略,默认为80;path是服务器上包含的内部路径。例如http://10.3.8.211/duty

②HTTP协议对资源共有6种操作方法,分别是GET、HEAD、POST、PUT、PATCH、DELETE

GET请求获取URL位置的资源HEAD请求获取URL位置资源的响应消息报告,即获得该资源的头部信息POST请求向URL位置的资源后附加新的数据PUT请求向URL位置存储一个资源,覆盖原URL位置的资源PATCH请求局部更新URL位置的资源,即改变该处资源的部分内容DELETE请求删除URL位置存储的资源

3.1.2**kwargs访问控制参数类型

控制访问参数共有13个,他们分别是params、data、json、headers、cookies、auth、files、timeout、proxies、allow_redirects、stream、verif和cert。他们均为可选项,下面进行逐一的介绍。

① params:字典或字节序列,作为参数增加到URL中。可以将键值对的内容加到URL中,例如下面的例子,将params等于键值对kv,则在最后输出的URL中发现,多了一个问号,而且在问号之后有之前设置的键值对。

>>> kv = {'key1':'value1','key2':'value2'}>>> r = requests.request('GET','http://python123.io/ws',params=kv)>>> print(r.url)http://www.baidu.com/ws?key1=value1&key2=value2 

② data:字典、字节序列或文件对象,作为Requests的内容,和params的区别就在于params将内容加到URL中,而data是将内容传送到URL对应的服务器中。

>>> kv = {'key1':'value1','key2':'value2'}>>> r =requests.request('POST','http://www.baidu.com",data=kv)>>> body = '主体内容'>>> r =requests.request('POST',"http://www.baidu.com',data=body)

③ json:JSON格式的数据,作为Request的内容。与data比较像,也是将内容提交到URL对应的服务器中,而且是提交到对应服务器的JSON域。

>>> kv = {'key1':'value1'}>>> r = requests.request('POST','http://www.baidu.com',json=kv)

④ headers:字典,HTTP定制头,用这个字段定义访问请求的header。该功能主要应用在请求的头定制。

>>> hd = {'user-agent':'Chrome/10'}>>>r = requests.request('POST','http://www.baidu.com',headers=hd)

⑤ cookies:字典或CookieJar,Request中的Cookie

⑥ auth:元组,支持HTTP认证功能。auth和cookies都是request方法中比较高级的属性。

⑦ files:字典类型,向服务器传输文件时的方法属性,向某一个链接提交某一个文件。

>>> fs ={'file':'data.xls','rb')>>> r = requests.request('POST','http://www.baidu.com',files=fs)

⑧ timeout:设定超时时间,单位为秒

⑨ proxies:字典类型,设定访问代理服务器,再访问对应的URL时使用代理服务器的IP地址,而隐藏自身真实的IP地址

>>> pxs = { 'http':"http://user:pass@10.10.10.1:1234','https://10.10.10.1:4321'}>>>r = requests.request('GET','http://www.baidu.com',proxies=pxs)

当在访问百度时,所使用的IP就是就是代理服务器的IP地址,可以隐藏爬取源的IP地址,有效防止逆追踪

⑩allow_redirects :True/False,默认为True,重定向开关

⑾stream: True/False,默认为True,获取内容立即下载开关

⑿verif: True/False,默认为True,认证SSL证书开关

⒀ cert:本地SSL证书路径

这四个字段分别对应的都是相应的高级功能

3.2 最常用的方法—— get( )方法

r=requests.get(URL,params,**kwargs)

URL: 是拟获取页面的URL链接

params: URL中可选的额外参数,字典或字节流格式,与requests中的params对应

**kwargs: 12个控制访问的参数,与requests中的对应

该方法构造一个向服务器请求资源的Requests对象,返回一个包含服务器资源的Response对象

#Response对象的属性r.status_code       #HTTP请求的返回状态,200表示连接成功,404及其他均表示失败r.text              #HTTP响应内容的字符串形式,即URL对应的页面内容r.encoding          #从HTTP header中猜测的响应内容编码方式r.apparent_encoding #从内容分析出的响应内容编码方式r.content           #HTTP响应内容的二进制形式

*说明:recoding是从HTTP header中猜测相应内容的编码方式,如果header中不存在charset字段,则会默认为编码为ISO-8859-1。因此有时候由该方法获得的编码方式不一定正确。而apparent_encoding是从响应的内容中分析出来的编码方式,其准确性更高,在使用text属性查看返回内容出现乱码时,可以考虑是否是编码方式猜测错误造成,利用r.encoding= r.apparent_encoding即可完成编码转换,然后即可看到显示正常的页面内容。

get()方法的使用常常按照下面的步骤进行:首先利用status_code属性检查是否连接成功,如果返回200则说明连接成功,下面进行编码设定等操作。

3.3其他的5中Requests库的方法

Requests库的剩余5种方法如下,他们各自有各自的功能。

requests.get(url,params=None,**kwrgs)requests.post(url,data=None,json=None,**kwargs)requests.put(url,data=None,**kwargs)requests.patch(url,data=None,**kwargs)requests.delete(url,**kwargs)


 
原创粉丝点击