美文网首页
Requests库的基本使用

Requests库的基本使用

作者: YoYoYoo | 来源:发表于2019-08-27 10:07 被阅读0次

一、什么是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  ....

处理。

相关文章

网友评论

      本文标题:Requests库的基本使用

      本文链接:https://www.haomeiwen.com/subject/eerfectx.html