基于python的验证码识别

基于python的验证码识别在利用python对一些网站进行批量操作的时候,验证码是个绕不过去的东西,虽然现在网上有很多图像识别的api,但是可能不适用于你的项目,我为了批量爬取班上同学的学分绩点写了个简单的图像识别大家可以参考一下我的图像识别的思路。1. 验证码图片的获取想要分析验证码,首先就需要获取验证码进行分析,在谷歌浏览器上打开验证码所在页面,打开开发者工具,选择NetWork,然后刷新一
摘要由CSDN通过智能技术生成

基于python的验证码识别

在利用python对一些网站进行批量操作的时候,验证码是个绕不过去的东西,虽然现在网上有很多图像识别的api,但是可能不适用于你的项目,我为了批量爬取班上同学的学分绩点写了个简单的图像识别大家可以参考一下我的图像识别的思路。

1. 验证码图片的获取

想要分析验证码,首先就需要获取验证码进行分析,在谷歌浏览器上打开验证码所在页面,打开开发者工具,选择NetWork,然后刷新一下验证码,就可以得到验证码的url地址,具体可以参考伯乐在线上的python计算学分绩点

这是我的实验环境


有了验证码url以后,我们就可以利用python将验证码图片保存在本地,便于分析,代码如下。



import urllib  
import urllib.request  
import http.cookiejar  


#自己分析出的验证码url    
yzmurl = 'http://run.hbut.edu.cn/Account/GetValidateCode?time=1488614613244' 

 #从数据包中分析出,处理post请求的url
posturl = 'http://run.hbut.edu.cn/Account/LogOn'hosturl = 'http://run.hbut.edu.cn/Account/LogOn?ReturnUrl=%2f' #主页url

#加载cookie 
cj = http.cookiejar.LWPCookieJar()  
cookie_support = urllib.request.HTTPCookieProcessor(cj)  
opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)  
urllib.request.install_opener(opener)  

#打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功)  
h = urllib.request.urlopen(hosturl) 

#获取验证码图片 
picture = opener.open(yzmurl).read()

#保存图片在本地
local = open('d://image.jpg', 'wb')
local.write(picture)
local.close()

2.将彩色图片变为黑白

图片识别因为彩色图片比较复杂,一般把图片变为黑白。先把图片用 ‘cconvert(“L”)’ 转化为256级灰度图像,再根据图片的阈值转化成黑白图像,阈值的合适与否直接影响到黑白图像的轮廓是否清晰从而影响图像识别的准确度。彩色图片转化为黑白详情请参考不剃头的一休哥,阈值的作用及求法请参考阮一峰大牛的相似图片搜索。我的代码如下。

from PIL import Image
#打开图片
im=Image.open("d:\\image.jpg")

#将图片转化为灰度
imgry = im.convert("L")

#计算阈值
threshold=thresholds(imgry)

#转化为黑白图片
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
out = imgry.point(table,'1')
#阈值计算函数,算法请看上面的链接
def thresholds(im):
    x,y=im.size
    n=x*y
    #print(n)
    max=0
    for i in range(256):
        n1=0
      
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值