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通过exifread模块获得图片exif信息的方法
Mar 16 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
python删除特定文件的方法
Jul 30 Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 Python
Python Dataframe 指定多列去重、求差集的方法
Jul 10 Python
Python实现全排列的打印
Aug 18 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 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传输数据的代码
2007/11/13 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
vue项目实战总结篇
2018/02/11 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
Python之py2exe打包工具详解
2017/06/14 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
python实现梯度下降算法
2020/03/24 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
详解Python中import机制
2020/09/11 Python
python try...finally...的实现方法
2020/11/25 Python
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
总经理职责范文
2013/11/08 职场文书
年度考核评语
2014/01/19 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
行政求职信
2014/07/04 职场文书
MySQL锁机制
2021/04/05 MySQL
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
Linux磁盘管理方法介绍
2022/06/01 Servers
virtualenv隔离Python环境的问题解析
2022/06/21 Python