爬虫技术Requests实现模拟登录

一、模拟登录的目的

  1. 访问受限内容:获取需要登录才能查看的页面数据

  2. 个性化数据采集:获取用户账户相关的定制化信息

  3. 自动化操作:实现自动签到、自动任务等流程

  4. 数据完整性:采集完整的用户视角数据(如社交网络信息)

  5. 状态保持:维持会话状态以进行连续操作

  6. 测试验证:用于网站功能测试和验证

二、对Requests模拟登录的认识

  1. 技术本质:通过Python Requests库模拟浏览器登录行为

  2. 实现原理

    • 处理登录表单提交

    • 维护会话cookies

    • 处理可能的验证机制

  3. 与浏览器登录的区别

    • 无GUI界面

    • 需要手动处理所有请求参数

    • 更高效但容错性较低

  4. 适用场景

    • 不依赖复杂前端验证的网站

    • 基于传统表单登录的系统

    • 不需要处理复杂JS加密的场景

三、Requests模拟登录的要求

技术能力要求

  1. 协议理解

    • 掌握HTTP/HTTPS协议基本原理

    • 理解Cookie/Session机制

    • 熟悉POST请求格式

  2. 分析能力

    • 能够分析网站登录流程

    • 识别表单字段和隐藏参数

    • 理解可能的CSRF防护机制

  3. 编程能力

    • 熟练使用Python Requests库

    • 能够处理各种响应数据格式

    • 实现会话状态保持

工程实践要求

  1. 完善的异常处理机制

  2. 合理的请求间隔控制

  3. 登录状态验证与自动重登

  4. 敏感信息的安全存储

  5. 符合robots.txt规范

    代码展示:
    import requests
    headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)\
                     AppleWebKit/537.36 (KHTML, like Gecko) \
                    Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0",
            "Cookie":'ll="118112"; bid=sdCbv0lV_Ns; _vwo_uuid_v2=DEAD3F91A77847C17BBE2D6A45A78725A|ebcbf4c4460361c191e5de1f6d6f566a; __utmz=30149280.1752800055.3.3.utmcsr=cn.bing.com|utmccn=(referral)|utmcmd=referral|utmcct=/; push_noty_num=0; push_doumail_num=0; __utmv=30149280.28996; ap_v=0,6.0; __utma=30149280.1408545778.1746885331.1752800055.1752814588.4; __utmc=30149280; __utmt=1; __utmb=30149280.2.10.1752814588; login_start_time=1752814600447'
    }
    def login():
        try:
            url="https://accounts.douban.com/j/mobile/login/basic"
            parm={
                "name":"13734755758",
                "password":"Wyp7758..",
                "remeber":True
    
            }
            s=requests.session()
            r = s.post(url,data=parm,headers=headers)
            r.raise_for_status()
            return s
        except Exception as err:
            print(err)
    
    def get_html(s,url):
        try:
            r=s.get(url,headers=headers)
            r.encoding=r.apparent_encoding
            r.raise_for_status()
            print("王祎鹏"in r.text)
        except Exception as err:
            print(err)
    
    if __name__=="__main__":
        session=login()
        print("登录成功!")
        url="https://www.douban.com/people/289967700/"
        get_html(session,url)
        print("获取个人主页成功!")

你可能感兴趣的:(爬虫)