zoukankan      html  css  js  c++  java
  • 【Python54.1--豆瓣登录】

    1、模拟豆瓣登录

    '''
    |-- 代码解析:
    |-- 1、登录必须具备的条件:url,cookie,fromData
        fromData的参数如下:
            source: index_nav
            form_email: 1832785141@qq.com
            form_password: wfq8319274129
            captcha-solution: rough
            captcha-id: K0dnHwvyM2evqk1Do8beSlpl:en
            login:登录
        拿到这些参数必须弄懂具体各个参数是什么含义:
            form_email : 用户名
            form_password : 密码
            captcha-solution : 验证码图片的名字(如何确认:登录页面查看网页源代码搜索:captcha-solution;另外一种方法:登录页检查,用左上角箭头查看验证码框。得到以下的内容:)
                <input type="text" autocomplete="off" class="inp" id="captcha_field" name="captcha-solution" tabindex="3" placeholder="验证码"/>
            captcha-id : 验证码图片ID(如何确认:同captcha-solution方法一样)
    |-- 2、由于存在验证码,所以data字典内分两部分写入,一部分写入验证码之前的字段:source,form_email,form_password。一部分等获取验证码后,在写入:
           captcha-solution,captcha-id,login
    |-- 3、用reponse接受请求
    |-- 4、读取返回来的数据
    |-- 5、获取验证码的地址(方法:登录页检查,用左上角的箭头点击验证码图片就可以得到地址,具体如下:)
            <img id="captcha_image" src="https://www.douban.com/misc/captcha?id=XnfFdo9PtGEvzszCDcsba03p:en&amp;size=s" alt="captcha" class="captcha_image" title="看不清楚?点图片可以换一个" style="cursor: pointer;">
            具体代码用:re.search('<img id="captcha_image" src="(.+?)" alt="captcha" class="captcha_image"/>', html)
                -- 这里需要注意的知识点:imgurl=re.search(), src="(.+?)"正则表达式
    |-- 6、获取验证码的图片url:url =  imgurl.group(1) 并把图片保存到目录下以便程序运行时输入具体的验证码:res = urllib.request.urlretrieve(url,'v.jpg')
    |-- 7、获取验证码的ID(方法同第5步一样,具体如下:) 
            <input type="hidden" name="captcha-id" value="F3RK1x6AUPruX28jxjfSGfoI:en">
            具体代码用: re.search('<input type="hidden" name="captcha-id" value="(.+?)"/>',html)
                --同样需要注意的知识点:re.search,value="(.+?) 正则表达式
    |-- 8、再次写入captcha-solution,captcha-id,login
    |-- 9、再次用reponse读取返回的数据
    |-- 10、做个检查点,判断返回的url是否是登录后的url
    '''
    
    import re
    import urllib.request
    import urllib.parse
    from http.cookiejar import CookieJar
    import ssl
    ssl._create_default_https_context = ssl._create_unverified_context
    
    
    #登录需要的参数
    login_url = "https://www.douban.com/accounts/login"
    cookie = CookieJar()
    opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor)
    
    data = {"form_email":"1832785141@qq.com",
            "form_password":"wfq8319274129",
            "source":"index_nav"}
    
    
    #request = urllib.request.Request(login_url,urllib.parse.urlencode(data).encode('utf-8'),method='POST')
    reponse = opener.open(login_url,urllib.parse.urlencode(data).encode('UTF-8'))
    
    #验证成功跳转至登录页
    if reponse.geturl() == login_url:
        html = reponse.read().decode()
    
        #获取验证码图片地址
        imgurl = re.search('<img id="captcha_image" src="(.+?)" alt="captcha" class="captcha_image"/>', html)
        print("imgurl++",imgurl)
    
        if imgurl:
            #group()返回组号匹配的所有字符串即:验证码图片的url
            url = imgurl.group(1)
            print("url--",url)
            #将验证码图片保存至同目录下
            res = urllib.request.urlretrieve(url,'v.jpg')
    
            #获取图片id:captcha-id
            captcha = re.search('<input type="hidden" name="captcha-id" value="(.+?)"/>',html)
            #print("captcha==",captcha)
    
            if captcha:
                vcode = input('请输入验证码:')
                data["captcha-solution"]=vcode
                data["captcha-id"] = captcha.group(1)
                data["login"] = "登录"
    
                #提交验证码
                reponse =opener.open(login_url,urllib.parse.urlencode(data).encode('UTF-8'))
    
                #登录成功,跳转至首页
                if reponse.geturl() == "https://www.douban.com/":
                    print("登录成功")

    涉及到的知识点

    1、https://www.cnblogs.com/tina-python/p/5508402.html

    2、http://www.cnblogs.com/anni-qianqian/p/10019672.html   (各类爬虫的实例!!!)

    3、URLError错误解决方案:https://blog.csdn.net/sylmoon/article/details/78777770

  • 相关阅读:
    mpvue 引入 vant-weapp 踩坑记录
    mac上hbuilder无法启动微信小程序调试窗口的解决办法
    mac 安装了xcode,flutter doctor 却检测不到展示叉叉
    vue 前端复制粘贴方式上传图片
    401 错误时,几个细节检查
    vue 图片src动态加载
    前端优化的大方向
    how to stop code runner in vscode(macOs)
    window server 2008 r2 TLS 升级1.2
    超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小
  • 原文地址:https://www.cnblogs.com/frankruby/p/10080460.html
Copyright © 2011-2022 走看看