• python爬虫模拟登录的图片验证码处理和会话维持


    目标网站:古诗文网

    登录界面显示:

     打开控制台工具,输入账号密码,在ALL栏目中进行抓包

    数据如下:

    登录请求的url和请求方式

     登录所需参数

     参数分析:

    __VIEWSTATE和__VIEWSTATEGENERATOR可以在登录界面获取,code为验证码,email为账号,pwd为密码,from为空,denglu为固定参数

    分析__VIEWSTATE和__VIEWSTATEGENERATOR

     

     可通过解析登录界面获取

    整体代码如下:

    # 引入各种库
    import requests
    from lxml import etree
    import pytesseract
    from PIL import Image
    from io import BytesIO
    
    # 会话保持
    s = requests.session()
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
    }
    # 登录界面路由
    login_url = 'https://so.gushiwen.org/user/login.aspx?from='
    r = s.post(login_url,headers=headers)
    res = etree.HTML(r.text)
    # 获取登录参数
    __VIEWSTATE = res.xpath('//input[@id="__VIEWSTATE"]/@value')[0]
    __VIEWSTATEGENERATOR = res.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0]
    
    # 获取验证码
    codeimage = s.get('https://so.gushiwen.org/RandCode.ashx')
    
    # 识别验证码
    def get_code(data):
        img = Image.open(BytesIO(data))
        img = img.convert('L')
        captcha = pytesseract.image_to_string(img)
        print(captcha)
        img.close()
        return captcha
    
    # 构造登录参数
    formdata = {
        '__VIEWSTATE': __VIEWSTATE,
        '__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR,
        'from': '',
        'email': '你的账号',
        'pwd': '你的密码',
        'code': get_code(codeimage.content),
        'denglu': '登录'
    }
    # 模拟登录
    res = s.post(login_url,headers=headers,data=formdata)
    # 判断是否登录成功,成功的话会跳转到个人中心
    if '我的收藏' in res.text:
        print('登陆成功')
    else:
        print('登陆失败')

    控制台输出:

     注意:文章账号秘密是错误的,读者可以自己申请账号,

    爬虫的开始需使用

    s = requests.session()

    来使会话维持,否则请求的验证码与登录时不同步,

    验证码识别有成功率,不一定一次成功。

    python系列教程:

    链接:https://pan.baidu.com/s/10eUCb1tD9GPuua5h_ERjHA
    提取码:h0td

  • 相关阅读:
    Flask 请求源码分析
    Flask 上下文管理
    flask-基础知识
    分布式爬虫
    数据结构
    webpack安装和入门
    vue相关
    vue入门
    修改npm全局安装模式的路径
    Vue2+VueRouter2+Webpack+Axios
  • 原文地址:https://www.cnblogs.com/nmsghgnv/p/12323320.html
Copyright © 2020-2023  润新知