携带cookie爬虫和使用session类处理cookie

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (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())

猜你喜欢

转载自blog.csdn.net/qq_42370150/article/details/91877509