• 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

  • 相关阅读:
    解决 “页面中文字增多,字号突然变大” 的问题
    Seajs的用法
    clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
    页面中文字增多,字号会突然变大
    flex的使用实例
    移动端弹窗滚动时window窗体也一起滚动的解决办法
    display:inline-block带来的问题及解决办法
    sql 整理积累
    T-SQL建索引
    php json_encode在CI框架中的使用细节
  • 原文地址:https://www.cnblogs.com/Skypeduty1225/p/15661794.html
Copyright © 2020-2023  润新知