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 相关文章推荐
django接入新浪微博OAuth的方法
Jun 29 Python
python&amp;MongoDB爬取图书馆借阅记录
Feb 05 Python
Python实现多线程HTTP下载器示例
Feb 11 Python
pycharm安装图文教程
May 02 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
浅谈Python中的bs4基础
Oct 21 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
python如何通过twisted搭建socket服务
Feb 03 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 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 身份验证方面的函数
2009/10/11 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
JavaScript DOM 对象深入了解
2016/07/20 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
javascript实现弹幕墙效果
2019/11/28 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
python实现滑雪游戏
2020/02/22 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
十岁生日父母答谢词
2014/01/18 职场文书
酒店员工职业生涯规划
2014/02/25 职场文书
班班通校本培训方案
2014/03/12 职场文书
校优秀毕业生主要事迹
2014/05/26 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
idea下配置tomcat避坑详解
2022/04/12 Servers
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS