Python爬虫学习第四天---requests模块-session

爬虫学习第四天—requests模块-session

requests模块中的Session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。

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, ...)

3、示例演示

使用requests.session来完成github登陆,并获取需要登陆后才能访问的页面

3.1、项目分析

1、对github登陆以及访问登陆后才能访问的页面的整个完成过程进行抓包
2、确定登陆请求的url地址、请求方法和所需的请求参数
3、部分请求参数在别的url对应的响应内容中,可以使用re模块获取
4、确定登陆后才能访问的页面的的url地址和请求方法
5、利用requests.session完成代码

3.2、分析过程

1、打开谷歌的无痕浏览器,输入github登录页面,进行抓包
	https://github.com/

在这里插入图片描述
在这里插入图片描述

说明:这里的action是指我们需要将数据发送给那个uri,method是指发送方法。

2、接下来我们输入登录的账号和密码

在这里插入图片描述
在这里插入图片描述

说明:这里的session的url拉到最下面显示了from data数据,我们需要将此数据发送至session的url页面中,所以需要确认from data数据的性质。这里需要对此处的数据多进行抓包查看。下图为三次抓包的对比结果

在这里插入图片描述

在这里插入图片描述

3.3、代码详解

import requests
import re
def login():
    # 创建session
    session = requests.session()
    # headers信息
    session.headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
    }
    proxies = {
        # "http": "http://1.198.72.207:9999",
        # "http": "http://106.14.5.129:80",
        "http": "http://60.207.131.49:80",
        # "https": "https://123.55.101.55:9999",
    }
    # 登录url1获取token信息
    url1 = 'https://github.com/login'
        # 发送请求获取响应
    # ret_1 = session.get(url1,headers=session.headers,proxies=proxies).content.decode()
    ret_1 = session.get(url1, headers=session.headers).content.decode()
    # print(ret_1)
        # 正则提取
    token = re.findall('name="authenticity_token" value="(.*?)" />',ret_1)[0]    # 只获取token的字符串
    timestamp_str = re.findall('<input type="hidden" name="timestamp" value="(.*?)" autocomplete="off" class="form-control" />',ret_1)[0]
    timestamp_secret_str = re.findall('name="timestamp_secret" value="(.*?)" autocom',ret_1)[0]

    # print(token,timestamp_str,timestamp_secret_str)


    # print(token)
    # 登录URL2
    url2 = 'https://github.com/session'
        # 构建表单数据
    data = {
        "commit": "Sign in",
        "authenticity_token": token,
        "login": "用户名",
        "password": "密码",
        "webauthn-support": "supported",
        "webauthn-iuvpaa-support": "unsupported",
        "timestamp": timestamp_str,
        "timestamp_secret": timestamp_secret_str
    }

    response2 = session.post(url2,data=data,headers=session.headers)
    # URL3验证
    username = 'lufei0920'
    url3 = 'https://github.com/'
    response3 = session.get(url3+username,headers=session.headers)
    print(re.findall('<title>(.+)</title>',response3.content.decode()))

if __name__ == "__main__":
    login()

结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lufei0920

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值