python cookie 模拟登录_Python爬虫请求cookie模拟登录豆瓣,python,requestscookie

本文详细介绍了如何使用Python的requests库模拟登录豆瓣,包括理解cookie和session的作用,处理登录后的cookie保存和读取,以及使用pickle进行对象序列化。通过示例代码展示了完整的登录流程。
摘要由CSDN通过智能技术生成

课程目标:

为什么要模拟登录

模拟登录原理 - cookie和session

如何识别常用的验证码

通过 selenium模拟登录并使用coodie

滑动验证码+selenium模拟登录哔哩哔哩

1.为什么要模拟登录

因为很多网站是需要登录之后才可以看到一些数据,所以需要用python模拟登录。

2.模拟登录原理 -cookie和session

request模拟登录豆瓣如下

import json

import requests

def login():

username = "xxx@qq.com"

password = "xxx"

url = "https://accounts.douban.com/j/mobile/login/basic"

headers = {

"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"

}

post_data = {

"ck": "",

"name": username,

"password": password,

"remember": "true",

"ticket": ""

}

res = requests.post(url, data=post_data, headers=headers)

res_json = json.loads(res.text)

if res_json['status'] == "success":

print("登录成功")

else:

print("登录失败")

if __name__ == "__main__":

login()

将 cookie 保存到文件中并从文件中读取 cookie

我们在上面已经登录之后,再登录首页,看看我们是否已经登录了。登录之后,右上角会显示我们的用户名,所以用用户名来做下识别。如下

# 上面已经登录了,下面继续登录首页,看看我们是否登录了

html = requests.get("https://www.douban.com/").text

# 8ll是我的豆瓣昵称,登录之后会显示出来

if "8ll" in html:

print("已经登录")

else:

print("未登录")

我们需要用到 requests 的session,

session = requests.session()

然后在请求中,把 request都换成session,如下,就可以正常登陆了

html = session.get("https://www.douban.com/", headers=headers).text

但是这样的话,程序退出了,就要重新获取一次,有没有方法可以把cookie保存下来呢?当然有,有2中方法

1. 第一种,利用res的cookies,然后给到下一次请求的cookies参数中,如下

res = session.post(url, data=post_data, headers=headers)

res_json = json.loads(res.text)

if res_json['status'] == "success":

print("登录成功")

cookie_jar = res.cookies

else:

print("登录失败")

# 上面已经登录了,下面继续登录首页,看看我们是否登录了

html = session.get("https://www.douban.com/", headers=headers, cookies=cookie_jar).text

上面用的是 cookie_jar 对象,也可以换位 dict对象,如下

res = session.post(url, data=post_data, headers=headers)

res_json = json.loads(res.text)

if res_json['status'] == "success":

print("登录成功")

cookie_dict = res.cookies.get_dict()

else:

print("登录失败")

# 上面已经登录了,下面继续登录首页,看看我们是否登录了

html = session.get("https://www.douban.com/", headers=headers, cookies=cookie_dict).text

如上,我们只要把 cookie保存到文件中,下次需要的时候再打开即可。要用到python的一个包

import pickle

,可以让我们很简单的把一个对象写到一个文件中。

1. 用pickle 把对象写入到文件,这里是把 cookie_jar文件写到文件中,及上面的 res.cookies, 不是 .get_dict()

ps: wb, w=write写入,b代表二进制

if res_json['status'] == "success":

print("登录成功")

f = open("douban.cookie", "wb")

pickle.dump(res.cookies, f)

f.close()

else:

print("登录失败")

代码可以用 with 优化如下,自动调动close。

with open("douban.cookie", "wb") as f:

pickle.dump(res.cookies, f)

2. 怎么用pickle 读数据, rb 是 read读,b是二进制的方式

with open("douban.cookie", "rb") as f:

cookies = pickle.load(f)

# 上面已经登录了,下面继续登录首页,看看我们是否登录了

html = session.get("https://www.douban.com/", headers=headers, cookies=cookies).text

# 8ll是我的豆瓣昵称,登录之后会显示出来

if "8ll" in html:

print("已经登录")

else:

print("未登录")

完整代码如下:

# +--------------------------

# | User: zq -

# | Version: python3.7 -

# | Time: 2020-03-16 16:21

# +--------------------------

import json

import requests

import pickle

def login():

session = requests.session()

username = "xxxx@qq.com"

password = "xxxxx"

url = "https://accounts.douban.com/j/mobile/login/basic"

headers = {

"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"

}

post_data = {

"ck": "",

"name": username,

"password": password,

"remember": "true",

"ticket": ""

}

res = session.post(url, data=post_data, headers=headers)

res_json = json.loads(res.text)

if res_json['status'] == "success":

print("登录成功")

with open("douban.cookie", "wb") as f:

pickle.dump(res.cookies, f)

else:

print("登录失败")

with open("douban.cookie", "rb") as f:

cookies = pickle.load(f)

# 上面已经登录了,下面继续登录首页,看看我们是否登录了

html = session.get("https://www.douban.com/", headers=headers, cookies=cookies).text

# 8ll是我的豆瓣昵称,登录之后会显示出来

if "8ll" in html:

print("已经登录")

else:

print("未登录")

if __name__ == "__main__":

login()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值