requests请求模块
简介
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作。
安装
pip install requests |
使用
先上一串代码
import requests |
- response.text返回的是Unicode格式,通常需要转换为utf-8格式,否则就是乱码。
- response.content是二进制模式,可以下载视频之类的,如果想看的话需要decode成utf-8格式。
- 不管是通过response.content.decode(“utf-8)的方式还是通过response.encoding=”utf-8”的方式都可以避免乱码的问题发生
各种请求方式
import requests |
基本GET
import requests |
带参数的GET请求
如果想查询http://httpbin.org/get页面的具体参数,需要在url里面加上,例如我想看有没有Host=httpbin.org这条数据,url形式应该是http://httpbin.org/get?Host=httpbin.org
下面提交的数据是往这个地址传送data里面的数据。
# 带参数的get请求 |
Json数据
从下面的数据中我们可以得出,如果结果:
1、requests中response.json()方法等同于json.loads(response.text)方法
import requests |
获取二进制数据
在上面提到了response.content,这样获取的数据是二进制数据,同样的这个方法也可以用于下载图片以及视频资源
添加header
首先说,为什么要加header(头部信息)呢?例如下面,我们试图访问知乎的登录页面(当然大家都你要是不登录知乎,就看不到里面的内容),我们试试不加header信息会报什么错。
import requests |
基本post请求:
通过post把数据提交到url地址,等同于一字典的形式提交form表单里面的数据
import requests |
结果:
{ |
语法结构
requests.post(url,data=None,json=None)
参数说明
- url: 需要爬取的网站的网址
- data: 请求数据
- json: json格式的数据
案例:
import requests
url='https://www.xslou.com/login.php'
data={'username':'18600605736', 'password':'57365736', 'action':'login'}
resp = requests.post(url,data)
resp.encoding='gb2312'
print('响应状态码:', resp.status_code) # 200
print('响应内容', resp.text) # <html>......</html>
响应:
import requests |
属性或方法 | 描述 |
---|---|
response.status_code | 响应状态码 |
response.content | 把response对象转换成二进制数据 |
response.text | 把response对象转换成字符串数据 |
response.encoding | 定义response对象的编码 |
response.cookie | 获取请求后的cookie |
response.url | 获取请求网址 |
response.json() | 内置的json解码器 |
response.headers | 以字典对象存储服务器响应头,字典不区分大小写 |
内置的状态码:
100: ('continue',), |
import requests |
request 高级操作
文件上传
import requests |
获取cookie
import requests |
会话保持
cookie的一个作用就是可以用于模拟登录,做会话保持
import requests |
cookie 和 session 区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
- 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
session发送请求后,实现登录后继续访问
import requests |
SSL证书认证参数 verify
- 参数值:True(默认)| False
- 适用网站:https类型网站但是没有经过 证书认证机构 认证的网站
- 适用场景:当程序中抛出SSLError异常则考虑使用此参数
- 使用示例:
requests.get(url=url,headers=headers,verify=False)
- 当verify参数设置为False时,则不会再对网站进行SSL证书认证
设置超时时间 timeout
我们可以通过timeout属性设置超时时间,一旦超过这个时间还没获得响应内容,就会提示错误。
import requests |
代理IP参数 proxies
语法格式:proxies = { ‘协议’:’协议://IP:端口号’}
示例:
proxies = {
'http':'http://IP:端口号',
'https':'http://IP:端口号',
}当我们抓取的地址为http时,则会选择proxies中http的代理,反之为https
import requests |
*私密代理和独享代理*
语法格式: proxies = {‘协议’:’协议://用户名:密码@IP:端口号’}
示例:
proxies = {
'http':'http://用户名:密码@IP:端口号',
'https':'http://用户名:密码@IP:端口号',
}当我们抓取的地址为http时,则会选择proxies中http的代理,反之为https
获取二进制数据
一般来说,对于非文本请求,可以以字节形式访问响应正文。
# 获取二进制数据 |