requests模拟登陆的三种方式(cookie,session)

cookie保存在浏览器中,很多浏览器限制一个站点最多保存20个cookie
session存在服务器中。

爬虫cookie和session
1.带上cookie和session的好处
能够请求到登陆后的页面
2,弊端
一套cookie和session往往对应一个用户,请求太快,请求次数太多,容易被识别为爬虫

不需要cookie的时候尽量不去使用cookie
但是有时为了获取登陆的页面,必须发送带有cookie的请求

处理cookie和session
session
requests提供了一个sessiion类,来实现客户端和服务器端的会话保持
使用的方法:
1.实例化一个session对象
2.让session来发送get或post请求

session=requests.session()
response=session.get(url,headers)
例子:
第一种方法:
 

import requests
def run():
    headers = {
        'User-Agent': 'ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'
    }
    data = {
        'username': 'xxxx',
        'password': 'xxxx'

    }
    session = requests.session()
    # 使用session发送请求,cookie保存其中
    session.post('https://passport.baidu.com/center', headers=headers, data=data)
    # 使用session请求登陆后地址,得到信息返回
    r = session.get("https://passport.baidu.com/center", headers=headers)
    with open('csdn-1.html', 'w', encoding='utf-8') as f:
        f.write(r.content.decode())

if __name__ == '__main__':
    run()

第二种方法,直接获取cookie放在headers中

import requests

def run():
    headers = {
        'User-Agent': 'ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36',
        'Cookie':'BAIDUID=341732C7B4F15BBC29D34AEACEB3504A:FG=1; PSTM=1542017140;'
                 ' BIDUPSID=2AC22745056694211D23B3E44908D13C; HOSUPPORT=1; '
                 'UBI=fi_PncwhpxZ%7ETaKARr9ykC%7EUxVaXAd4LMQqiLsD0A7cjJoq7PwEMEJbzj-kwTBzbZ0hiDKutNki369rZtk3; '
                 'USERNAMETYPE=3; SAVEUSERID=a83c8629c010e3fdeb37bc15bbd859; '
                 'HISTORY=439af17d04a8573ef0a503db42f7f8eb74194a; cflag=15%3A3; '
                 'pplogid=1978AIi2iDItRkilaVSoqU%2F1X%2FxJALykIUX9p6Uk4D0coM4%3D; '
                 'STOKEN=59bc2a92ec36899d06dc0ded956639e6d7ab5fa617516a8ea1656eb926d7081a;'
                 'BDUSS=ENLNTVSVVRqVFI3SDJwQTJJRm5yWXMwQ35QYW9XM29UTUIxWk83ZGNmb2xlQzFjQVFBQUFBJCQAAAAAAAAAAAEAAACvILVXsaHO7W3OosG5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXrBVwl6wVcR;'
                 ' PTOKEN=d0c63029731a23a92850fccfb5803c10; Hm_lvt_90056b3f84f90da57dc0f40150f005d5=1543891782;'
                 ' Hm_lpvt_90056b3f84f90da57dc0f40150f005d5=1543892594'
    }
    r=requests.get('https://passport.baidu.com/center',headers=headers)
    print(r.content.decode())
    with open('csdn-2.html','w',encoding='utf-8') as f:
        f.write(r.content.decode())

if __name__ == '__main__':
    run()

第三种方式:将cookies字典化

import requests


def run():
    url='https://passport.baidu.com/center'
    headers={
        'User-Agent': 'ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36',
    }
    #将cookie转为字典
    cookies='BAIDUID=341732C7B4F15BBC29D34AEACEB3504A:FG=1;PSTM=1542017140;BIDUPSID=2AC22745056694211D23B3E44908D13C;HOSUPPORT=1;UBI=fi_PncwhpxZ%7ETaKARr9ykC%7EUxVaXAd4LMQqiLsD0A7cjJoq7PwEMEJbzj-kwTBzbZ0hiDKutNki369rZtk3;USERNAMETYPE=3; SAVEUSERID=a83c8629c010e3fdeb37bc15bbd859;HISTORY=439af17d04a8573ef0a503db42f7f8eb74194a; cflag=15%3A3;pplogid=1978AIi2iDItRkilaVSoqU%2F1X%2FxJALykIUX9p6Uk4D0coM4%3D;STOKEN=59bc2a92ec36899d06dc0ded956639e6d7ab5fa617516a8ea1656eb926d7081a;BDUSS=ENLNTVSVVRqVFI3SDJwQTJJRm5yWXMwQ35QYW9XM29UTUIxWk83ZGNmb2xlQzFjQVFBQUFBJCQAAAAAAAAAAAEAAACvILVXsaHO7W3OosG5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXrBVwl6wVcR;PTOKEN=d0c63029731a23a92850fccfb5803c10; Hm_lvt_90056b3f84f90da57dc0f40150f005d5=1543891782;Hm_lpvt_90056b3f84f90da57dc0f40150f005d5=1543892594'
    cookies={cookie.split('=')[0]:cookie.split('=')[1]  for cookie in cookies.split(";")}
    r=requests.get(url=url,headers=headers,cookies=cookies)
    with open ('csdn-3.html','w',encoding='utf-8') as f:
        f.write(r.content.decode())

if __name__ == '__main__':
    run()

不需要建立session对象来获取cookie直接复制浏览器cookie的情况
1.cookie过期时间很长的网站(学校网站)
2,在cookie过期之前能拿到所有数据
3,配合其他程序, 其他程序获取cookie

获取登陆后的页面三种方式
1.实例化session,使用session发送post请求,然后在使用session.get获取登陆后的信息
2,将cookie信息加入到headers中
3,将cookies字典化,然后调用
 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python模拟登录通常使用requests库来实现,以下是三种常见的方式: 1. 基于session登录方式 ```python import requests # 创建session对象 s = requests.Session() # 登录接口 login_url = "http://example.com/login" # 请求参数 data = { "username": "your_username", "password": "your_password" } # 登录 s.post(login_url, data=data) # 访问需要登录才能访问的页面 response = s.get("http://example.com/profile") ``` 2. 基于cookie登录方式 ```python import requests # 登录接口 login_url = "http://example.com/login" # 请求参数 data = { "username": "your_username", "password": "your_password" } # 登录 response = requests.post(login_url, data=data) # 获取cookie cookie_dict = response.cookies.get_dict() # 使用cookie访问需要登录才能访问的页面 response = requests.get("http://example.com/profile", cookies=cookie_dict) ``` 3. 基于token的登录方式 ```python import requests # 登录接口 login_url = "http://example.com/login" # 请求参数 data = { "username": "your_username", "password": "your_password" } # 登录 response = requests.post(login_url, data=data) # 获取token token = response.json().get("token") # 设置header中的Authorization字段 headers = { "Authorization": f"Bearer {token}" } # 使用token访问需要登录才能访问的页面 response = requests.get("http://example.com/profile", headers=headers) ``` 以上三种方式都可以实现模拟登录,具体使用哪种方式取决于登录接口的实现方式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值