版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
知识点预习
cookie的作用:
实现状态保持,就是说你登录一次后,下次登录就不需要输入账号密码了,直接登录,这就是cookie的作用
cookie的实现过程:
第一次登录是需要你输入账号密码的,登陆成功后,服务器根据你的身份信息就会设置生成属于你的cookie,c,服务器生成cookie后返回给浏览器,浏览器会将Cookie保存,下次请求同一网站时浏览器就发送该Cookie给服务器,服务器根据cookie里的信息知道你是谁了,返回属于你的信息。
所以说只要有你的cookie就可以登录你的账号,requests发送带cookie的请求有三种方式
使用cookie登录账号的三种方法
前两种方式直接拷贝cookie
import requests
headers = {
'Cookie': "has_recent_activity=1; _device_id=971aeabb13c430638333a74284d30fea; "
}
requests.get(url, headers=headers)
import requests
cookies = {"__Host-user_session_same_site ": "6FtKmOAHXPYAJFwIBl3zinXI7mJBbtBviIOtvZzq8lLOlCab "}
requests.get(url, headers=headers, cookies=cookies)
第三种方法用requests中的session类
使用方法:
session = requests.session()
response = session.get(url,headers)
session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie
所以说需要两次请求,第一次获取cookie,保存到session实例中,第二部,可以使用cookie登录网站,这样就可以爬取登录后的数据了
import requests
import re
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
}
# 第一次请求 获取authenticity_token
login_url = "https://github.com/login"
session = requests.session()
res = session.get(login_url, headers=headers)
# name="authenticity_token" value="xxxxx" />
authenticity_token = re.search('name="authenticity_token" value="(.*?)" />', res.content.decode()).group(1)
# 第二次请求,登录,使session获得cookie
session_url = "https://github.com/session"
data = {
'utf8': '✓',
'authenticity_token': authenticity_token,
'login': '[email protected]',
'password': '15973086441lpp',
'webauthn-support': 'unknown',
'commit': 'Sign in'
}
session.post(login_url, headers=headers, data=data)
# 第三次请求,使用session中的cookie直接登录
url = 'https://github.com/mylpc/test01'
res = session.get(url, headers=headers)
print(res.content.decode())