requests库的介绍和使用
win 和 mac 平台在终端,通过pip安装
使用命令 pip install requests
来进行安装。
requests使用的示例
import requests
url = "https://lizhe.blog.csdn.net/" #定义url地址 以个人csdn主页为例
r = requests.get(url) #请求的访问
print(r.encoding) #查看文本编码
print(r.status_code) #查看响应状态码 200响应成功
print(r.text) #产看响应的文本
运行后
两个重要的对象:Response响应、Requests请求
Response对象包含服务器返回的所有信息,也包含请求的Request信息
import requests
#查看响应的类型
type(requests.get("https://lizhe.blog.csdn.net/"))
requests库有几个主要的方法:
- request.request() 来构造一个请求,也可以支持各方法的请求
- requests.get() 获取网页的主要方法
- requests.head() 获取网页头信息的方法。
- requests.post() 向网页提交POST请求方法
- requests.put() 向网页提交PUT请求方法
- request.patch() 向网页提交局部修改请求
- requests.delete() 向网页提交删除请求
requests.get(url, params=None, **kwargs) url是链接地址,params额外参数是字典或者字节流格式,**kwargs是12个控制的参数。
Response对象的属性:
r.statis_code 返回状态,200表示连接成功,404表示失败
r.text 响应内容的字符串形式,url链接的内容
r.encoding 响应内容的编码方式,header中不存在charset,则认为编码为ISO‐8859‐1
r.apparent_encoding 内容中分析出响应内容的编码方式
r.content 响应内容的二进制形式
Requests库的异常:
requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError HTTP错误异常
requests.URLRequired URL缺失异常
requests.TooManyRedirects 超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 连接远程服务器异常
requests.Timeout 请求URL超时,产生超时异常
r.raise_for_status() 不是200产生异常,产生requests.HTTPError
在方法内部判断r.status_code是否等于200,不需要增加额外的if语句,该语句便于利用try‐except进行异常处理
爬取网页的通用代码框架
import requests
def getHTMLText(url):
try:
r = requests.get(url) #请求的访问
r.raise_for_status() #如果状态不是200,引发HTTPError
r.encoding = r.apparent_encoding #分析网页的编码形式
return r.text
except:
return "error"
if __name__ == '__main__': #执行程序
url = "https://lizhe.blog.csdn.net/" # 定义url地址 以个人csdn主页为例
print(getHTMLText(url))
HTTP协议
HTTP,Hypertext Transfer Protocol,超文本传输协议
是一个基于“请求与响应”模式的、无状态的应用层协议
HTTP协议采用URL作为定位网络资源的标识,URL格式:http://host[:port][path]
host: 合法的Internet主机域名或IP地址
port: 端口号,缺省端口为80
path: 请求资源的路径
HTTP协议对资源的操作
通过URL和命令管理资源,操作独立无状态,网络通道及服务器成为了黑盒子
GET 请求获取URL位置的资源 requests.get()
HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息 requests.head()
POST 请求向URL位置的资源后附加新的数据 requests.post()
PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源 requests.put()
PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容 requests.patch()
DELETE 请求删除URL位置存储的资源 requests.delete()
requests.request()方法
requests.request(method, url, **kwargs) 在method中使用get,post等那7中方法,对应的是使用url的链接,然后是访问控制的参数一共有13个。
对应的分别是:
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的内容
header 字典,HTTP定制头
cookie 字典或CookieJar,Request中的cookie
auth 元组,支持HTTP认证功能
files 字典类型,传输文件
timeout 设置超时时间,单位秒
proxies 字典类型,设定访问代理服务器,可以增加登录认证
allow_redirects True/False,默认为True,重定向开关
stream True/False,默认为True,获取内容立即下载开关
verify True/False,默认为True,认证SSL证书开关
cert 本地SSL证书路径
几个控制访问参数的示例:
kv = {"key1":"value1","key2":"value2"}
r = requests.request("GET","https://lizhe.blog.csdn.net/", params=kv)
print(r.url) #字典或字节序列,作为参数增加到url中
boby = "主体内容"
r = requests.request("POST", "https://lizhe.blog.csdn.net/", data=body)
#字典、字节序列或文件对象,作为Request的内容
kv = {"key1":"value1"}
r = requests.request("POST", "https://lizhe.blog.csdn.net/", json=kv)
#JSON格式的数据,作为Request的内容
hd = {"user-agent":"Chrome"}
r = requests.request("POST", "https://lizhe.blog.csdn.net/",headers=hd)
#字典,HTTP定制头
fs = {"file":open("xxx.xls","rb")}
r= requests.request("POST", "https://lizhe.blog.csdn.net/", files=fs)
#字典类型,传输文件
r= requests.request("GET", "https://lizhe.blog.csdn.net/", timeout=10)
#设定超时时间,秒为单位
pxs = { 'http': 'http://user:pass@10.10.10.1:1234'
'https': 'https://10.10.10.1:4321' }
r = requests.request("GET", "https://lizhe.blog.csdn.net/", proxies=pxs)
#字典类型,设定访问代理服务器,可以增加登录认证