Python爬虫实现验证码登录代码实例


Posted in Python onMay 10, 2019

很多网站为了避免被恶意访问,需要设置验证码登录,避免非人类的访问,Python爬虫实现验证码登录的原理则是先到登录页面将生成的验证码保存下来,然后人为输入后,包装后再POST给服务器,实现验证,这里还涉及到了Cookie,其实Cookie保存在本地主机上,避免用户重复输入用户名和密码,在连接服务器的时候将访问连接和Cookie组装起来POST给服务器。

这里涉及到了两次向服务器POST,一次是Cookie,这里还自行设计想要Cookie的内容,由于是要登录,Cookie中存放的则是用户名和密码。第二次POST则是向服务器提交验证。

这里用到Python3,主要用到的包是re  urllib.request   http.cookiejar

上代码,借鉴了别人的代码~~~

import re
import urllib.request
import http.cookiejar
#from http.comkie import CookieJar 上面那句和这句等同
 
loginurl='https://www.douban.com/accounts/login'
cookie = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor)#在已存的Cookie下建立连接
 
params={}
params['form_email']='用户名'
params['form_password']='密码'#这里写上已有的用户名和密码
params['source']='http://www.douban.com/accounts/login'
 
#从首页提交登陆
response = opener.open(loginurl,urllib.parse.urlencode(params).encode('utf-8'))#urllib.parse.urlencode(params).encode('utf-8')这个是向服务
#器POST的内容,可以打印一下response.geturl()请求的连接看一下
#print(response.geturl()[0:33])
#验证成功跳转至登陆页
if response.geturl()[0:33]=='https://accounts.douban.com/login':
    html = response.read().decode('utf-8')
    #print(html),可以先打印一下文件内容,为了看到网页元素更方便的写正则,可以复制下来,在需要获取的地方用(.+?)表示,然后用group()元组来取得,
    #验证图片地址
    imgurl=re.search('<img id="captcha_image" src="(.+?)" alt="captcha" class="captcha_image"/>',html)
    if imgurl:
       url=imgurl.group(1)
       #print(url)
       #将验证码以v.jpg保存在本地,在输入验证码的时候可以手工输入
       res=urllib.request.urlretrieve(url,'v.jpg')
       captcha = re.search('<input type="hidden" name="captcha-id" value="(.+?)"/>',html)
       #print(captcha.group(1))
       if captcha:
           vcode=input('请输入图片上的验证码:')
           params["captcha-solution"] = vcode
           params["captcha-id"] = captcha.group(1)#这个是动态生成的,需要从网页中获得
           params["user_login"] = "登录"
           #提交验证码验证
           response = opener.open(loginurl,urllib.parse.urlencode(params).encode('utf-8'))
           if response.geturl()=="https://www.douban.com/":
              print("login sucess")

以上所述是小编给大家介绍的Python爬虫实现验证码登录详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python在windows和linux下获得本机本地ip地址方法小结
Mar 20 Python
Django imgareaselect手动剪切头像实现方法
May 26 Python
Fabric 应用案例
Aug 28 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
python 请求服务器的实现代码(http请求和https请求)
May 25 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
tensorflow 获取变量&amp;打印权值的实例讲解
Jun 14 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
在pycharm 中添加运行参数的操作方法
Jan 19 Python
代码详解django中数据库设置
Jan 28 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
Aug 05 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 Python
详解如何管理多个Python版本和虚拟环境
May 10 #Python
不到40行代码用Python实现一个简单的推荐系统
May 10 #Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 #Python
Python3列表内置方法大全及示例代码小结
May 10 #Python
详解python 爬取12306验证码
May 10 #Python
详解用python写一个抽奖程序
May 10 #Python
python实现小球弹跳效果
May 10 #Python
You might like
一个简单的PHP&amp;MYSQL留言板源码
2020/07/19 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
python函数返回多个值的示例方法
2013/12/04 Python
python改变日志(logging)存放位置的示例
2014/03/27 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
python3下载抖音视频的完整代码
2019/06/05 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
pandas按条件筛选数据的实现
2021/02/20 Python
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
八一慰问活动方案
2014/02/07 职场文书
药品营销策划方案
2014/06/15 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书