什么是requests
Requests is an elegant an simple HTTP library for Python.
Requests是一个优雅而简单的HTTP库。
requests库是一个常用的用于http请求的模块,它使用python语言编写,可以方便的对网页进行爬取,是学习python爬虫的较好的http请求模块。
requests的安装
Win平台:“以管理员身份运行” cmd -> 执行 pip install requests
当然,前提是已经安装好python环境。。。。。
requests的安装小测试
上述语句中,通过import导入requests库,使用requests的get()方法访问了百度,r.status_code返回的是HTTP请求的返回状态(200表示成功),r.text返回的是HTTP响应内容的字符串形式。
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.request(method,url,**kwargs)
构造并发送一个Request对象,返回一个Response对象,支撑各方法的基础方法.。
method :请求方式,对应新建Request对象要使用的HTTP方法,包括:GET,POST,PUT,DELETE等
url:新建Request对象的URL链接
**kwargs:13个控制访问的可选参数,均为可选项
13个可选参数(**kwargs)解析:
2.requests.get(url,params=None,**kwargs
请求获取URL位置的资源。
url:新建Request对象的URL链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的可选参数
3.requests.head(url,**kwargs)
请求获取URL位置资源的响应消息报告,即获得该资源的响应的头部信息。
url:新建Request对象的URL链接
**kwargs:13个控制访问的可选参数
4.requests.post(url,data=None,json=None,**kwargs)
请求向URL位置的资源后附加新的数据。
url:新建Request对象的URL链接
data:字典、字节序列,文件对象,Request的内容
json:JSON格式的数据,Request的内容
**kwargs:11个控制访问参数
5.requests.put(url,data=None,**kwargs)
请求向URL位置存储的一个资源,覆盖原URL位置的资源。
url:新建Request对象的URL链接
data:字典、字节序列,文件对象,Request的内容
**kwargs:12个控制访问参数
6.requests.patch(url,data=None,**kwargs)
请求局部更新URL位置的资源,即改变该处资源的部分内容。
url:新建Request对象的URL链接
data:字典、字节序列,文件对象,Request的内容
**kwargs:12个控制访问参数
7.requests.delete(url,**kwargs)
请求删除URL位置存储的资源。
url:新建Request对象的URL链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:13个控制访问的可选参数
Requests库的2个重要对象
Request
Response
如:r = requests.get(url)
即构造并发送一个Request对象,返回一个Response对象(r)。
Response对象包含服务器返回的所有信息,也包括请求的Request信息。
Response对象的属性
以 r 表示一个Response对象
属性 | 说明 |
---|---|
r.status_code | HTTP请求的返回内容,200表示连接成功,404表示失败 |
r.text | HTTP响应内容的字符串形式,即url 对应的页面内容 |
r.encoding | 从HTTP header 中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
如上图所示,获取的Response对象的text属性出现了乱码;这里我们可以通过修改Response对象的encoding属性来修正:
Response对象的编码解析
涉及Response对象的编码的属性有:encoding,apparent_encoding,其中:
encoding:如果headers中不存在charset,则默认编码为ISO-8859-1,text属性根据encoding属性显示网页内容。
apparent_encoding:根据网页内容分析出来的编码方式,可以看作encoding的备选。
Requests库的异常
Request库的异常:
Response的异常:
Requests库的简易使用—爬取网页的通用代码框架
import requests
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status() # 如果状态不是200,则引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return "error"
if __name__=="__main__":
url="http://www.baidu.com" #爬取百度首页
print(getHTMLText(url))
使用案例
使用通用框架try-except爬取图片
import requests as req
import os
url="https://i.sso.sina.com.cn/images/login/qq.png"
root="./imgs//"
dst=root+"picture1.png"
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(dst):
r=req.get(url)
with open(dst,'wb') as f:
f.write(r.content)
f.close()
print("文件保存成功")
else:
print("文件已存在")
except:
print("爬取失败")