知行编程网知行编程网  2022-01-24 12:30 知行编程网 隐藏边栏 |   抢沙发  11 
文章评分 0 次,平均分 0.0

为什么需要模拟登录呢?很多时候我们爬取一些网页的时候,站点会验证我们的请求身份。如果是未登录的用户,则拦截请求。这也是反爬虫的一种。

所以有时候我们需要先进行登录,这个时候就会引入Cookie的概念

cookie是保存在客户端(浏览器)上的纯文本文件,里面回保存一些服务器返回的数据,比如用户信息、权限信息、失效时间等等

下面以豆瓣为例,比如我在浏览器中以登录的状态直接去请求某个用户的页面,是这样的https://www.douban.com/people/100000000/

爬虫系列 | 9、爬虫中模拟登录的常用操作

在程序中,因为没有登录,访问同样的链接

response = requests.get(url, headers=headers)
with open('douban.html''w', encoding='utf-8'as f:
f.write(response.text)

执行完毕之后打开HTML,如下图所示

爬虫系列 | 9、爬虫中模拟登录的常用操作

在程序中如何获取到跟浏览器一样的页面呢,先来说一下第一种方法,比较死板的,就是在请求头headers中写入Cookie信息

cookie是由发送post登录请求之后,由服务端创建返回的

爬虫系列 | 9、爬虫中模拟登录的常用操作

代码如下:

response = requests.get(url, headers=headers)
with open('douban.html''w', encoding='utf-8'as f:
f.write(response.text)

执行之后,打开douban.html,发现正常获取数据了

爬虫系列 | 9、爬虫中模拟登录的常用操作

这种方式不是很灵活,因为你需要经常的去替换Cookie信息。

所以一般通过模拟登录的方式动态的获取Cookie信息。这时候就引入了session会话对象,在请求的过程中,如果产生了Cookie,则会将cookie信息进行存储到session对象中。

下面就需要使用session对象来模拟登录, 输入账号密码,之后点击登录,观察调试控制,发现有下图的标识的URL,就是登录请求

爬虫系列 | 9、爬虫中模拟登录的常用操作

参数如下所示,name就是手机号,password明文传输,并没有进行加密。并且是form表单提交

爬虫系列 | 9、爬虫中模拟登录的常用操作

代码和注释如下:

这里需要注意的是请求头中需要添加referer用来标识登录请求是从referer这个链接发送的,不然请求会被拦截。


}

# 创建一个session对象
session = requests.Session()

login_url = 'https://accounts.douban.com/j/mobile/login/basic'
data = {
'ck''',
'remember''true',
'name''手机号码',
'password''密码'
}
# 使用session对登录的post请求 进行发送
response = session.post(url=login_url, data=data, headers=headers)
# 查看是否登录成功
if response.status_code != 200:
print('登录失败')

print(session.headers)
# 登录成功之后cookie会加载到session对象中,然后通过session进行get请求
info = session.get('https://www.douban.com/people/100000000/', headers=headers)

with open('douban.html''w', encoding='utf-8'as f:
f.write(info.text)

执行之后,打开HTML如下图所示,证明模拟登录成功。

爬虫系列 | 9、爬虫中模拟登录的常用操作

总结:整个过程都是围绕Cookie进行的,而Cookie的一大特性是无状态,所以我们可以通过requests创建一个session对象,来承载登录之后返回的Cookie信息。后续直接通过session(已经携带了Cookie)去发送get请求即可,

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享