Requests模块介绍:
#介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)
#注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求
#安装:pip3 install requests
#各种请求方式:常用的就是requests.get()和requests.post()
>>> import requests
>>> r = requests.get('https://api.github.com/events')
>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
>>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})
>>> r = requests.delete('http://httpbin.org/delete')
>>> r = requests.head('http://httpbin.org/get')
>>> r = requests.options('http://httpbin.org/get')
#建议在正式学习requests前,先熟悉下HTTP协议
http://www.cnblogs.com/linhaifeng/p/6266327.html
一、基于GET请求
1、基本请求
response=requests.get(url) url就是请求的地址
这就是发送了一个GET请求,返回一个response对象
2、get方法的参数
(1)headers:模拟http的请求头信息
get(url,
headers={
"User-Agent" : 是http请求头中的一个字段,内容为操作系统版本,浏览器版本,服务器通常将这个字段作为检验请求来源的依据,
"Referer" : 代表请求的来源域名,也就是从哪点进来而产生的请求,比如我们从京东页面上点击一个按钮产生请求,那请求中的这个字段就是京东首页的域名,
})
(2)params:给get请求加上数据
方式一:在URL中加上?来携带数据,一般我们不这样用
若数据中有中文字符就需要我们进行编码,可以用urllib来对中文进行编码再拼接到URL中
from urllib.parse import urlencode params={ 'wd':'美女', } url='https://www.baidu.com/s?%s' %urlencode(params,encoding='utf-8')
方式二:上述操作都可以用params参数来代替,既可以对中文字符进行编码,又可以拼接到URL中
response=requests.get('https://www.baidu.com/s?', params={ 'wd':'美女', 'pn':num })
(3)cookie:主要应用在需要登录之后才能获取到的数据的网站,我们要在请求中加上cookie,直接在cookie={}中添加对应的键值对就行了
reponse=requests.get('https://github.com/settings/emails', headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36', }, cookies={ 'user_session':'CpxXbf5MvLuoRxVeIqUNHs6WlwUOkF4vMqcZ2IoKAZ5Sia-M' } )
二、基于POST请求
1、介绍
#GET请求
HTTP默认的请求方法就是GET
* 没有请求体
* 数据必须在1K之内!
* GET请求数据会暴露在浏览器的地址栏中
GET请求常用的操作:
1. 在浏览器的地址栏中直接给出URL,那么就一定是GET请求
2. 点击页面上的超链接也一定是GET请求
3. 提交表单时,表单默认使用GET请求,但可以设置为POST
#POST请求
(1). 数据不会出现在地址栏中
(2). 数据的大小没有上限
(3). 有请求体
(4). 请求体中如果存在中文,会使用URL编码!
注意注意注意::::requests.post()用法与requests.get()完全一致,特殊的是requests.post()有一个data参数,用来存放请求体数据
2、基本请求
response = requests.post(url,
data={}
)
这就是发送了post请求,data参数是数据,在字典中写入一个个键值对就行
其它cookie和header参数都有
补充:::
》》》allow_redirects = True/False
是否允许重定向,False就代表
》》》上面都是我们自己去处理cookie信息,requests模块也为我们提供了方法去处理cookie
session=requests.session() 就得到了一个session对象
发请求就用这个session对象去发
response=session.get()
response=session.post()
三、response对象的属性
get和post请求都会得到一个response对象
# 响应的文本数据 print(respone.text) #响应的二进制数据,通常是图片视频之类 print(respone.content) #响应的状态码 print(respone.status_code) #响应的头部信息 print(respone.headers) #响应的cookie信息,返回一个对象 print(respone.cookies) #把响应的cookie值转换为字典形式 print(respone.cookies.get_dict()) #响应的cookie值中的键值对 print(respone.cookies.items()) print(respone.history) #响应的编码,可以修改,默认编码为ISO-8859-1 print(respone.encoding)