一、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]

*[User-Agent]:浏览器名称
*[Referer]:页面跳转处
*[Cookie]:用户数据
*[Content-Type]:内容类型
*[Host]:主机和端口号
*[Connection]:链接类型
*[Upgrade-Insecure-Requests]:升级为HTTPS请求
*[Authorization]:表示HTTP协议中需要认证资源的认证信息

params携带参数

  • 作用:携带url参数字典
  • 构造方式:构造params字典(’参数名’:’参数值’)
  • 使用方法:response = requests.get(url, params = params)
  • params替代方式:直接对含有参数的url发起请求

cookies参数

  • 作用:身份验证
  • 构造方式:构造cookies字典(’Cookie名’:’Cookie值’),以;空格分割每一对键值对
  • 使用方法:response = requests.get(url, cookies)
  • 注意:cookie一般是有过期时间的,一旦过期需要重新获取
  • 将cookie字符串转换为cookies参数所需的字典:
1
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)
    img

(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类型)
1
2
# 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请求——有道翻译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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()