requests模块入门


requests库是比urllib更加方便实用的HTTP第三方库,它支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。

requests库下的主要方法

requests.request():构造一个方法,它是支撑以下各方法的基础方法。

requests.get():获取HTML网页的主要方法,对应于HTTP中的GET。

requests.head():获取HTML网页头信息的方法,对应于HTTP中的HEAD。

requests.post():向HTML网页提交POST请求的方法,对应于HTTP中的POST。

requests.put():向HTML网页提交PUT请求的方法,对应于HTTP的PUT。

requests.patch():向HTML网页提交局部修改请求,对应于HTTP中的PATCH。

requests.delete():向HTML网页中提交删除请求,对应于HTTP中的DELETE。


1.requests.get()方法

作用:

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

语法格式:

requests.get(url,params=None,**kwargs)

params是url中的额外参数,kwargs表示控制访问的参数,它有很多,接下来会在用到的时候再做介绍。

注意:

get()方法实际上是用request()方法来封装,这对其它诸如post、delete等方法同样适用。即requests库中这七个方法,除了request()这个基础方法之外,其它方法的实现都是通过调用request()方法来完成的。
调用get()方法,实际上内部是这样的:

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

Response对象的属性(设Response对象为r):

r.status_code #HTTP请求的返回状态,200表示成功,404表示失败
r.text #HTTP请求内容的字符串形式
r.content #HTTP请求内容的二进制形式
r.encoding #从HTTP header中猜测的响应内容编码方式
r.apparent_encoding #从内容中分析出的响应内容编码方式

encoding和apparent_encoding的区别:

encoding是从HTTP header中猜测出的相应内容编码方式,它可能与HTML响应内容不相容。该属性由HTTP头中的charset属性指定,如果HTTP header中指定了该属性,那么说明该服务器对它的资源编码是有要求的,即采用charset指定的编码。如果header中未指定charset字段,那么默认编码是ISO-8859-1,该编码并不能解析中文。

apparent_encoding是在分析了网页内容之后得到的编码方式,它在原则上比encoding得到的结果更加准确。


2.requests.request()方法

语法格式:

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

介绍request()方法主要是想把它的kwargs可选参数说明一下,request()方法知道了,其它方法其实也就不用再介绍了。

kwargs作为request()方法的可选参数,它有13个可选项,分别如下:
params:字典或字节序列,作为添加到url的参数。注意是添加到url中,不是网页内容中。
data:字典、字节序列或文件对象,作为Request的内容。
json:JSON格式的数据,作为Request的内容。对应于网页内容中的json字段。
headers:字典,HTTP定制头。利用该字段可修改HTTP的头字段。
cookies:字典或CookieJar,Request中的cookie。 auth:元组,支持HTTP认证功能。
files:字典类型,传输文件。即类似{‘file’:open(‘file.xls’,‘rb’)}这种参数。
timeout:设置超时时间,单位s。 proxies:字典类型,设定访问代理服务器,可以增加登陆认证。
allow_redirects:重定向开关,默认为True。 stream:获取内容下载开关,默认为True。
verify:认证SSL证书开关,默认为True。 cert:本地SSL证书路径。

其它方法一览:

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


Requests库异常处理

requests.ConnectionError:网络连接错误异常,如DNS查询失败、拒绝连接等。

requests.HTTPError:HTTP错误异常。

requests.URLRequired:URL缺失异常。

requests.TooManyRedirects:超过最大重定向次数,产生重定向异常。

requests.ConnectTimeout:连接远程服务器超时异常。

requests.Timeout:请求URL超时异常。


爬取网页通用代码框架

我们要爬取一个url,利用get()方法之后会得到一个Response对象。Response对象包含了我们要爬取的网页内的所有信息,因此,学会对Response对象进行处理是很重要的。

Response对象有一个比较特殊的方法,即raise_for_status()方法,调用该方法后,当状态码不是200时会产生requests.HTTPError异常,通过检测该异常并派和异常处理语句,爬取网页的过程就会更加稳定高效。

爬取网页的通用代码框架:

import requests
def getHTMLText(url):
    try:
        r = requests.get(url,timeout=30)
        r.raise_for_status() #如果不是200,产生的HTTPError异常将被expect捕捉
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常!"
if __name__ == '__main__':
    url = 'http://www.baidu.com'
    print(getHTMLText(url))

HTTP协议的六种方法

之前在HTTP协议的那篇博客中只介绍了GET、POST和HEAD方法,其它的没有提及,这里简单的介绍一下。

HTTP协议对网络资源提供了六种操作方法,分别是:

GET:请求获取URL位置上的资源。
HEAD:请求获取URL位置上的资源的响应头信息。
POST:请求向URL位置上的资源后附加新的数据。
PUT:请求在URL位置上存储一个新资源,新资源将覆盖原URL位置的资源。
PATCH:请求局部更新URL位置上的资源。
DELETE:请求删除URL位置上的资源。

你可以把URL看成是和你的计算机上的文件路径一样的东西,只不过本地文件路径是让你找到你的计算机上的资源,而URL是帮助找到在因特网中的资源。

关于POST方法:

用POST方法提交字典数据的话,会被存储在网页的from字段中。
用POST方法提交普通数据的话,会被存储在网页的data字段中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值