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 相关文章推荐
浅述python2与python3的简单区别
Sep 19 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
解决keras backend 越跑越慢问题
Jun 18 Python
通过实例解析python创建进程常用方法
Jun 19 Python
python对execl 处理操作代码
Jun 22 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 Python
python本地文件服务器实例教程
May 02 Python
整理Python中常用的conda命令操作
Jun 15 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
PHP之预定义接口详解
2015/07/29 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
Python实现类继承实例
2014/07/04 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
Python实现按中文排序的方法示例
2018/04/25 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
20年同学聚会感言
2014/02/03 职场文书
实习生求职自荐信
2014/02/07 职场文书
淘宝客服工作职责
2014/07/11 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
Python词云的正确实现方法实例
2021/05/08 Python
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server