- 一、requests模块简介
- 二、requests模块常用方法和属性
- 1、常用方法(发起请求)
- (1)get方法
- (2)post方法
- 2、常用属性(响应对象)
- 三、requests模块常用对象
- 1、session对象
- 四、实战演练
- POST请求——有道翻译
- 作用:发送http请求,获取响应数据
- 优点:相对于urllib模块,requests模块更简洁易懂
-
使用方式: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)
(2)post方法verify忽略CA证书参数
- 作用:忽略网站的CA证书页面
- 使用方法:response = requests.get(url,verify=False)
-
常用场景:登陆注册(post更安全)、传输大量文本内容(post对数据长度没有要求)
-
使用方式:response = requests.post(url, data)
-
常用参数:data、headers、params、cookies、timeout、proxy、verify
data参数
- 作用:传递请求的数据
- 构造方式:构造data字典(‘data名’:‘data值’)
- 使用方法:response = requests.post(url, data)
2、常用属性(响应对象)其他参数
与get请求一致
- 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类型)
-
作用:自动处理cookie,下一次请求会带上前一次的cookie
-
常用场景:自动处理连续多次请求过程中产生的cookie
-
使用方式:session = requests.session(),session对象发送get或post请求的参数,与requests模块发送请求的参数完全一致
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()



