requests模块
一、requests模块简介
- 作用:发送http请求,获取响应数据
- 优点:相对于urllib模块,requests模块更简洁易懂
二、requests模块常用方法和属性
1、常用方法(发起请求)
(1)get方法
-
使用方式:
response = requests.get(url)
-
常用参数:headers、params、cookies、timeout、proxy、verify
headers请求头
- 作用:模拟浏览器
- 构造方式:构造headers字典(‘请求头字段名’:‘字段对应的值’)
- 使用方法:
response = requests.get(url, headers = headers)
- 常用请求头:[User-Agent]、[Referer]、[Cookie]
- 非常用请求头:[Content-Type]、[Host]、[Connection]、[Upgrade-Insecure-Requests]、[Authorization]
params携带参数
- 作用:携带url参数字典
- 构造方式:构造params字典(‘参数名’:‘参数值’)
- 使用方法:
response = requests.get(url, params = params)
- params替代方式:直接对含有参数的url发起请求
cookies参数
- 作用:身份验证
- 构造方式:构造cookies字典(‘Cookie名’:‘Cookie值’),以
;
、空格
分割每一对键值对- 使用方法:
response = requests.get(url, cookies)
- 注意:cookie一般是有过期时间的,一旦过期需要重新获取
- 将cookie字符串转换为cookies参数所需的字典:
cookies_dict = {cookie.split('=')[0]:cookie.split('=')[-1] for cookie in cookies_str.split('; ')}
timeout超时参数
- 作用:对请求进行强制要求,必须在特定的时间内返回结果,否则报错
- 使用方法:
response = requests.get(url, timeout = 3)
,这里timeout=3表示发送请求后,3秒钟内返回响应,否则就抛出异常
proxy代理参数
- 作用:为了防止频繁向一个域名发送请求导致ip被封,所以我们需要使用代理ip
- 构造方式:构造proxy字典(‘代理类型’:‘代理类型:ip地址:端口号’)
- 使用方法:
response = requests.get(url, proxies=proxies)
verify忽略CA证书参数
- 作用:忽略网站的CA证书页面
- 使用方法:
response = requests.get(url,verify=False)
(2)post方法
-
常用场景:登陆注册(post更安全)、传输大量文本内容(post对数据长度没有要求)
-
使用方式:
response = requests.post(url, data)
-
常用参数:data、headers、params、cookies、timeout、proxy、verify
data参数
- 作用:传递请求的数据
- 构造方式:构造data字典(‘data名’:‘data值’)
- 使用方法:
response = requests.post(url, data)
其他参数
与get请求一致
2、常用属性(响应对象)
response.text
str类型的响应文本(解码类型: requests模块自动根据HTTP 头部对响应的编码推测的文本编码)response.content
bytes类型的响应文本(解码类型: 没有指定)response.content.decode()
解决中文乱码问题(默认utf-8)response.status_code
响应状态码response.headers
响应头response.url
响应url(有时候响应的url和请求的url并不一致)response.cookies
响应cookie(经过了set-cookie动作,返回cookieJar类型)
# cookieJar类型转换为cookies字典
cookies_dict = requests.utils.dict_from_cookiejar(response.cookies)
response.json()
自动将json字符串类型的响应内容转换为python对象(dict or list)response.request.headers
响应对应的请求头response.request._cookies
响应对应的请求cookie(返回cookieJar类型)
三、requests模块常用对象
1、session对象
-
作用:自动处理cookie,下一次请求会带上前一次的cookie
-
常用场景:自动处理连续多次请求过程中产生的cookie
-
使用方式:
session = requests.session()
,session对象发送get或post请求的参数,与requests模块发送请求的参数完全一致
四、实战演练
POST请求——有道翻译
import requests
import json as js
class king(object):
def __init__(self,word):
self.url = 'https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
}
self.word = word
self.data = {
'i': self.word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': '16534734202228',
'sign': 'a69ac558a76e563a31b6c3a204c8b257',
'lts': '1653473420222',
'bv': '25412fa435d3225e27363d5c00ce51ba',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
def get_data(self):
response = requests.post(self.url,data=self.data,headers=self.headers)
return response.content.decode()
def parse_data(self,data):
dict_data = js.loads(data)
print(dict_data['translateResult'][0][0]['tgt'])
def run(self):
response = self.get_data()
# print(response)
self.parse_data(response)
if __name__ == '__main__':
word = input('请输入要翻译的单词:')
king = king(word)
king.run()