Requests库的入门-python
01
简介
Requests库是Python HTTP 库。
Requests作用:自动爬取HTML页面/自动提交网络请求。
Requests库项目地址:http://docs.python-requests.org/en/master/
中文下载地址:http://docs.python-requests.org/zh_CN/latest/
02
安装
Requests库的安装有两种方式:
1.pip安装:简单快捷(推荐)
Win_7_64bit平台:
“以管理员身份运行”cmd,执行 pip install requests
Python的下载(版本有2.x和3.x)、安装、环境变量配置、pip安装及使用见往前文章(爬虫系列)。
2.python命令方式
先去github网址的Requests库项目下载:https://github.com/kennethreitz/requests
下载完解压即可
下载完解压到桌面即可,该文件夹目录如下:
Win_7_64bit平台:“以管理员身份运行”cmd,
执行 python setup.py install
其中setup.py是Requests库中setup.py的绝对路径。
测试代码:以官网为例
>>> import requests
>>> r = requests.get('https://www.baidu.com')
>>> r.status_code
>>> r.headers
>>> r.encoding
>>> r.text
03
方法
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
01
Requests库的get()方法
requests.get(url, params=None, **kwargs)
-
url : 拟获取页面的url链接
-
params : url中的额外参数,字典或字节流格式,可选
-
**kwargs : 12个控制访问的参数
02
Requests库的2个重要对象
Response对象包含爬虫返回的内容
Response对象包含服务器返回的所有信息,也包含请求的Request信息
Response对象的属性及说明
r.status_code:HTTP请求的返回状态,200表示连接成功,404表示失败
r.text:HTTP响应内容的字符串形式,即,url对应的页面内容
r.encoding:从HTTP header中猜测的响应内容编码方式
r.apparent_encoding:从内容中分析出的响应内容编码方式(备选编码方式)
r.content:HTTP响应内容的二进制形式
理解Response的编码
r.encoding:从HTTP header中猜测的响应内容编码方式
r.apparent_encoding:从内容中分析出的响应内容编码方式(备选编码方式)
详细说明如下:
-
r.encoding:如果header中不存在charset,则认为编码为ISO‐8859‐1
-
r.text:根据r.encoding显示网页内容
-
r.apparent_encoding:根据网页内容分析出的编码方式,可以看作是r.encoding的备选
03
理解Requests库的异常
异常及说明
requests.ConnectionError:网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError:HTTP错误异常
requests.URLRequired:URL缺失异常
requests.TooManyRedirects:超过最大重定向次数,产生重定向异常
requests.ConnectTimeout:连接远程服务器超时异常
requests.Timeout:请求URL超时,产生超时异常
r.raise_for_status()在方法内部判断r.status_code是否等于200,如果不是200,产生异常 requests.HTTPError,不需要增加额外的if语句,该语句便于利用try‐except进行异常处理。
示例代码:
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 "产生异常"
if __name__ == "__main__":
url = "http://www.baidu.com"
print(getHTMLText(url))
04
HTTP协议与Requests库
HTTP,Hypertext Transfer Protocol,超文本传输协议
HTTP是一个基于“请求与响应”模式的、无状态的应用层协议
HTTP协议采用URL作为定位网络资源的标识,URL格式如下:
http://host[:port][path]
host: 合法的Internet主机域名或IP地址
port: 端口号,缺省端口为80
path: 请求资源的路径
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
HTTP协议对资源的操作:
方法及说明
GET——请求获取URL位置的资源
HEAD——请求获取URL位置资源的响应消息报告,即获得该资源的头部信息
POST——请求向URL位置的资源后附加新的数据
PUT——请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH——请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE——请求删除URL位置存储的资源
通过URL和命令管理资源,操作独立无状态,网络通道及服务器成为了黑盒子
理解PATCH和PUT的区别
假设URL位置有一组数据UserInfo,包括UserID、UserName等20个字段
需求:用户修改了UserName,其他不变
采用PATCH,仅向URL提交UserName的局部更新请求
采用PUT,必须将所有20个字段一并提交到URL,未提交字段被删除
PATCH的最主要好处:节省网络带宽
HTTP协议与Requests库
HTTP协议方法 | Requests库方法 | 功能一致性 |
GET | requests.get() | 一致 |
HEAD | requests.head() | 一致 |
POST | requests.post() | 一致 |
PUT | requests.put() | 一致 |
PATCH | requests.patch() | 一致 |
DELETE | requests.delete() | 一致 |
Requests库主要方法解析
requests.request(method, url, **kwargs)
-
method : 请求方式,对应get/put/post等7种
-
url : 拟获取页面的url链接
-
**kwargs:控制访问的参数,共13个
requests.request(method, url, **kwargs)
method : 请求方式
-
r = requests.request('GET', url, **kwargs)
-
r = requests.request('HEAD', url, **kwargs)
-
r = requests.request('POST', url, **kwargs)
-
r = requests.request('PUT', url, **kwargs)
-
r = requests.request('PATCH', url, **kwargs)
-
r = requests.request('delete', url, **kwargs)
-
r = requests.request('OPTIONS', url, **kwargs)
**kwargs:控制访问的参数
-
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证书路径
requests.get(url, params=None, **kwargs)
url : 拟获取页面的url链接
params : url中的额外参数,字典或字节流格式,可选
**kwargs: 12个控制访问的参数
requests.head(url, **kwargs)
url : 拟获取页面的url链接
**kwargs: 12个控制访问的参数
requests.post(url, data=None, json=None, **kwargs)
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
json : JSON格式的数据,Request的内容
**kwargs: 12个控制访问的参数
requests.put(url, data=None, **kwargs)
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数
requests.patch(url, data=None, **kwargs)
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数
requests.delete(url, **kwargs)
url : 拟删除页面的url链接
**kwargs: 12个控制访问的参数
未完待续...............
欢迎留言......
请大家关注公众号动态!
请大家关注公众号动态!
请大家关注公众号动态!