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使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
Python 文件操作的详解及实例
Sep 18 Python
Python检测网络延迟的代码
May 15 Python
Python版名片管理系统
Nov 30 Python
Python类装饰器实现方法详解
Dec 21 Python
python快排算法详解
Mar 04 Python
余弦相似性计算及python代码实现过程解析
Sep 18 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
python实现控制台输出彩色字体
Apr 05 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
python中rb含义理解
Jun 18 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利用COM对象访问SQLServer、Access
2006/10/09 PHP
PHP访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
YII框架http缓存操作示例
2019/04/29 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
js 深拷贝函数
2008/12/04 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
javascript监听页面刷新和页面关闭事件方法详解
2017/01/09 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
python获取从命令行输入数字的方法
2015/04/29 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
python cs架构实现简单文件传输
2020/03/20 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
python中可以声明变量类型吗
2020/06/18 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
学生上课说话检讨书
2014/10/25 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python
Oracle用户管理及赋权
2022/04/24 Oracle
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python