Python爬虫之Requests模块session进行登录状态保持

一、利用requests.session进行登录状态保持
  Requests模块中的session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。

接下来我们通过requests.session登录GitHub网学习

1、requests.session的作用以及应用场景
  requests.session的作用:自动处理cookie,即 下一次请求会带上前一次的cookie
  requests.session的应用场景:自动处理连续的多次请求过程中产生的cookie
2、requests.session使用方法
  session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie

session = requests.session() # 实例化session对象
response = session.get(url, headers, ...)
response = session.post(url, data, ...)

  session对象发送get或post请求的参数,与requests模块发送请求的参数完全一致
3、测试
使用requests.session来完成github登陆,并获取需要登陆后才能访问的页面

(1)提示
  对github登陆以及访问登陆后才能访问的页面的整个完成过程进行抓包
  ①、首先访问https://github.com/login页面,

  ②、打开Preserve log,输入账号和密码,点击登录按钮进行登录;登录完成后找到一个名为session的文件,

(2)确定登陆请求的url地址、请求方法和所需的请求参数,部分请求参数在别的url对应的响应内容中,可以使用re模块获取

 

# url1-获取taken
url1 = 'https://github.com/login'
# 发送请求获取响应
res_1 = session.get(url1, timeout=3).content.decode()
# 正则提起
token = re.findall('name="authenticity_token" value="(.*?)" />', res_1)
print(token)

(3)确定登陆后才能访问的页面的的url地址和请求方法

(4)利用requests.session完成代码

import requests
import re


def login():
    # session
    session = requests.session()

    # headers
    session.headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.2261 SLBChan/10 "
    }

    # url1-获取taken
    url1 = 'https://github.com/login'
    # 发送请求获取响应
    res_1 = session.get(url1, timeout=3).content.decode()
    # 正则提起
    token = re.findall('name="authenticity_token" value="(.*?)" />', res_1) # 使用正则获取登陆请求所需参数
    print(token) 

    # url2-登录
    url2 = 'https://github.com/session'
    # 构建表单数据
    data = {
        "commit": "Sign in", # 固定值
        "authenticity_token": token, # 该参数在登陆页的响应内容中
        "login": input('输入github账号:'),
        "password": input('输入github账号:')
        "webauthn - support": "supported",
        "webauthn - iuvpaa - support": "unsupported"
    }
    print(data)
    # 发送请求登录
    session.post(url2, data=data)
    # url3-验证
    # 将得到的页面保存为html,然后打开保存后的github.html是否与自己登录后的页面一致
    url3 = 'https://github.com/账号的名称'
    response = session.get(url3)
    with open('github.html', 'wb') as f:
        f.write(response.content)


if __name__ == '__main__':
    login()

参考: Python爬虫之Requests模块session进行登录状态保持_兮尹的博客-CSDN博客_python requests 获取session

原文地址:https://www.cnblogs.com/Skypeduty1225/p/15661794.html