python爬虫学习笔记及随堂练习--cookie模拟登录


一、前言

此代码是学习波波老师python爬虫教学视频时课堂笔记及随堂练习
对应视频: 波波老师B站视频[P36] 对应up为:路飞学城IT

笔记概要:
使用cookie模拟登陆并爬取登陆后的页面。

额外感谢:
崔庆才大佬提供的一个免费练习爬虫的平台,里面提供网站练习各种爬虫的应用。
地址: 崔庆才大佬的爬取中心


二、笔记

http/https协议特性:无状态
get、request没有请求到对应页面数据的原因:
发起的第二次基于个人主页页面请求的时候,服务器并不知道此请求是基于登录状态下的请求。

cookie:用来让服务器端记录客户端的相关状态。

  • 手动处理:通过抓包工具获取cookie值,将该值封装到headers
  • 自动处理:
    • cookie值的来源
      模拟登录post请求后,由服务器端创建
    • session会话对象:
      • 作用:
      1. 可以进行请求的发送
      2. 如果请求过程中产生了cookie,则该cookie会被自动存储/携带在该session对象中
      • 步骤:
      1. 创建一个session对象:session = requests.Session()
      2. 使用session对象进行模拟登陆post请求的发送(cookie就会被存储在session中)
      3. session对象对个人主页对应的get请求进行发送(携带了cookie)

二、代码

1. 直接用request不使用cookie,结果不能获取登录后页面

import requests

def main():
    headers = {
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64;x64;rv: 84.0) Gecko / 20100101 Firefox / 84.0"
    }
    login_url = 'https://login2.scrape.center/login?next=/' #登录界面
    data = {
        'username':"admin",
        'password':"admin",
    }
    response = request.post(url=login_url, headers=headers, data=data).text
    print(response.status_code)
    
    detail_url = 'https://login2.scrape.center/'	#登录后应该显示的界面
    detail_page_text = request.get(url=detail_url, headers=headers, data=data).text

    with open('scrape.html','w',encoding='utf-8') as fp:
        fp.write(detail_page_text)


if __name__ == '__main__':
    main()
    print('over')

2. 使用session进行cookie模拟登陆

import requests
def main():
    #创建一个session对象
    session = requests.Session()
    headers = {
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64;x64;rv: 84.0) Gecko / 20100101 Firefox / 84.0"
    }
    login_url = 'https://login2.scrape.center/login?next=/'	#登录界面
    data = {
        'username':"admin",
        'password':"admin",
    }
    response = session.post(url=login_url, headers=headers, data=data).text
    #print(response.status_code)

    
    # 爬取登录后网页
    detail_url = 'https://login2.scrape.center/'	#登录后界面
    #手动cookie处理
    #headers = {
    #    'Cookie':'UM_distinctid=17767875766571-0f0e0fcaa08d33-4c3f217f-1fa400-177678757671bf; sessionid=rgynmjenwdpnqtcerhe29qr079bedww4'
    #}
    #自动cookie处理,前面需要有第一次post登录,使session存储cookie
    detail_page_text = session.get(url=detail_url, headers=headers, data=data).text

    with open('scrape.html','w',encoding='utf-8') as fp:
        fp.write(detail_page_text)

if __name__ == '__main__':
    main()
    print('over')


结语

如果对代码有疑问或其他问题,欢迎评论告诉我,我会常来看 (毕竟面向CSDN编程) 。我也是一个刚刚学习python的新手,欢迎大家一起讨论,共同进步。顺便给大家拜个早年,祝牛年大吉。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值