一、什么是Requests库?
Requests库是用Python编写的,基于urllib,采用Apache2 Licensed开源协议的HTTP库;
相比urllib库,Requests库更加方便,可以节约我们大量的工作,完全满足HTTP测试需求。
二、安装
pip install requests
三、Requests库基本用法详解
1、举个例子
import requests
r = requests.get('http://www.baidu.com') #调用requests的get方法
print(type(r)) # 输出Response类型
print(r.status_code) # 输出状态码
print(type(r.text)) # 响应体类型
print(r.text) # 输出响应体内容,无需解码
print(r.cookies) # 输出Cookies
2、各种请求方式(HTTP测试网站:http://httpbin.org/)
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')
3、GET请求
- 基本get请求
import requests
r = requests.get('http://httpbin.org/get')
print(r.text) #对比urllib,无需用decode解码
-
添加两个参数
如name=germey,age=22
import requests
r = requests.get('http://httpbin.org/get?name=germey&age=22')
# 直接加在后面,但不太人性化
print(r.text)
用参数params添加
import requests
data = {
'name':'germey',
'age':22
}
r = requests.get('http://httpbin.org/get',params=data)
print(r.text)
- 解析Json
import requests
r = requests.get('http://httpbin.org/get')
print(type(r.text))
print(r.json()) # 将返回结果是JSON格式的字符串转为字典
print(type(r.json()))
- 抓取二进制数据并保存(图片、视频等)
import requests
r = requests.get('https://github.com/favicon.ico')
# print(type(r.text))
# print(type(r.content))
# print(r.content)# bytes类型的数据,不会乱码
with open('favicon.ico','wb') as f:
f.write(r.content)
-
添加headers
headers:请求头headers是我们请求网页时携带的信息,有一些网站会根据headers来判断请求是不是爬虫,我们需要通过伪造headers来绕过这种反爬机制.
User-Agent:顾名思义,就是指谁来代替我们访问网页的。如果它对应的是requests库,那么对方网站就可以直接看出你是爬虫而拒绝这次请求。
具体介绍参考:https://zhuanlan.zhihu.com/p/35625779
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
r = requests.get('https://www.zhihu.com/explore',headers=headers) # 简单来说,不加headers可能会被禁止访问
print(r.text)
4、POST请求
另一种常见的请求方式
- 示例
import requests
data = {'name':'germey','age':'22'}
r = requests.post('http://httpbin.org/post',data=data) # 注意这里和get请求的区别
print(r.text)
5、响应
import requests
#常用的response属性
response3 = requests.get('http://www.jianshu.com')
print(type(response3.status_code),response.status_code)
print(type(response3.headers),response3.headers)
print(type(response3.cookies),response3.cookies)
print(type(response3.url),response3.url)
print(type(response3.history),response3.history)
四、Requests库高级用法
1、文件上传
import requests
file = {'file':open('favicon.ico','rb')}#将之前抓取的github图标以二进制格式读取
response = requests.post('http://httpbin.org/post',files = file)
print(response.text)
2、获取Cookies
import requests
r = requests.get('http://www.baidu.com') # 获取Cookies
print(r.cookies)
for key,value in r.cookies.items(): # 遍历输出每一个Cookies的名称和值,实现Cookies的遍历解析
print(key + '=' value)
3、维持登陆
以知乎为例,登陆知乎将Headers种的Cookie复制下来
import requests
headers = {
'Cookie':'复制下来的Cookie',
'Host':'www.zhihu.com',
'User-Agent':'同样复制一下'}
r = requests.get('https://www.zhihu.com',headers=headers)
print(r.text)
4、会话维持
利用Session,可以做到模拟同一个会话而不用担心Cookies的问题,通常用于模拟登陆成功后再进·行下一步的操作。
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)
5、证书验证
import requests
#通过一下两行代码即可把警报消除,即使verify=False,报警还是存在的
from requests.packages import urllib3
urllib3.disable_warnings()
#首先会检测证书是否合法,通过verify就可以设置成False就可关闭错误提示
response = requests.get('https://www.12306.cn',verify = False)
print(response.status_code)
6、代理设置
import requests
proxies = {
'http':'http://127.0.0.1:1080/pac?auth=HgT2fpms98njlh9QGpsP&t=201803030916114202',
'https':'https://127.0.0.1:1080/pac?auth=HgT2fpms98njlh9QGpsP&t=201803030916114202',
}
response = requests.get('http://www.taobao.com',proxies = proxies)
print(response.status_code)
注:除了基本的 HTTP 代理外, requests 还支持 SOCKS 协议的代理。
首先,安装socks这个库:pip install requests[socks]
import requests
proxies = {
'http':'socks5//127.0.0.1:1080/pac?auth=HgT2fpms98njlh9QGpsP&t=201803030916114202',
'https':'socks5//127.0.0.1:1080/pac?auth=HgT2fpms98njlh9QGpsP&t=201803030916114202',
}
response = requests.get('http://www.taobao.com',proxies = proxies)
print(response.status_code)
7、超时设置
import requests
r = requests.get('https://www.taobao',timeout = 1) #1秒内没有响应,则抛出异常
print(r.status_code)
8、身份认证登陆
有时候访问网页时会出现以下认证界面:
image.png
ort requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://localhost:5000',auth=HTTPBasicAuth('username','password'))
# 也可以简写为 r = requests.get('http://localhost:5000',auth=('username','password'))
print(r.status_code)
9、异常处理
如果出现异常的话,可以到官网查询相应的异常
http://docs.python-requests.org/en/master/api/#exceptions
用:
try:
.....
except ....
处理。
网友评论