知识点:掌握 利用requests.session进行状态保持
通过requests模块中的session类实例化生成的对象进行get或post请求访问url时,对象会自动存储浏览器中cookie,不用再去在get或post请求头中填写cookie值
import requests
import re
# 构造请求头字典
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36',
}
# 实例化session对象
session = requests.session()
# 访问登陆页获取登陆请求所需参数
response = session.get('https://github.com/login', headers=headers)
authenticity_token = re.search('name="authenticity_token" value="(.*?)" />', response.text).group(1) # 使用正则获取登陆请求所需参数
# 构造登陆请求参数字典
data = {
'commit': 'Sign in', # 固定值
'utf8': '✓', # 固定值
'authenticity_token': authenticity_token, # 该参数在登陆页的响应内容中
'login': input('输入github账号:'),
'password': input('输入github账号:')
}
# 发送登陆请求(无需关注本次请求的响应),登陆成功后,python会自动把cookie值存入对象session中
session.post('https://github.com/session', headers=headers, data=data)
# 打印需要登陆后才能访问的页面
#此时不用在请求包中设置cookie,因为python已经把cookie值存储在了对象中
response = session.get('https://github.com/1596930226', headers=headers)
print(response.text)