http/https协议特性:无状态
没有请求到对应页面数据的原因:发起的第二次基于个人主页页面请求的时候,服务器端并不知道该次请求是基于登陆状态下的请求
cookie:用来让服务器端记录客户端的相关状态
(1)手动处理:通过抓包工具获取cookie值,将该值封装到headers中
(2)自动处理:
——cookie值的来源:模拟登陆post请求后,由服务器端创建
session会话对象:
——作用:
(1)可以进行请求的发送
(2)如果请求过程中产生了cookie,则该cookie会被自动存储/携带在该seesion对象中
——使用:
(0)创建一个session对象,session=requests.Session()
(1)使用session对象进行模拟登录post请求数据的发送(cookie就会被存储在session中)
(2)session对象对个人主页对应的get请求进行发送(携带了cookie)
# 模拟登陆
from lxml import etree
import requests
if __name__ == "__main__":
session = requests.session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.69'
}
url = 'http://www.gebiqu.com/login.php'
parms={
'LoginForm[username]': '你的账号',
'LoginForm[password]': '你的密码',
't_btnlogin':'',
'action': 'login',
'jumpreferer': '1'
}
# 使用session进行post请求发送
response = session.post(url=url,data=parms,headers=headers)
print(response.status_code)
mybook_url = 'http://m.gebiqu.com/'
# 使用携带cookie的session进行get请求的发送
mybook_text = session.get(url=mybook_url,headers=headers).text
with open('./mybook.html','w',encoding='utf-8') as fp:
fp.write(mybook_text)
print('保存成功!')
|