项目背景:
之所以做这个其实很久就有这个想法了,因为搞爬虫有大半年了,怕热很多网站,也模拟登陆了许多网站,包括知乎微博等,但是有个问题是,当我们遇到验证码的时候,就需要人工打验证码了,特别是用selenium登录新浪手机端的时候,每次都需要人为打验证码,感觉还不够全自动。所以就有了这个摸索。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第一步:(爬取验证码)
我们首先需要获取足够的验证码样本,因为从简单做起,所以本次的验证码都是由数字组成且都比较规则;http://smart.gzeis.edu.cn:8081/Content/AuthCode.aspx
#-*- coding:utf-8 -*-
import requests
import time
# 文件下载,主要下载训练集
def download_pics(pic_name):
url = 'http://smart.gzeis.edu.cn:8081/Content/AuthCode.aspx'
res = requests.get(url,stream=True)
with open(u'J:/数据分析学习/python/机器学习之验证码识别/pics/%s.jpg'%(pic_name),'wb') as f:
for chunk in res.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
f.flush()
f.close()
if __name__ == '__main__':
for i in xrange(100):
pic_name = int(time.time()*1000000)
download_pics(pic_name)
第二步:(切割验证码)
因为每个验证码是4个数字组成,我的思路是把验证码切割成四个,然后逐一识别,这样的准确率应该比较高一些;这里值得一提的就是:切割图片的参数(通过PS可以看到相隔的像素值,然后可以推算出一个公式)、将图片二值化,把图片变成黑白图片、我们需要读取某个文件夹下的所有图片,然后保存下来。
# -*- coding: utf-8 -*-
from PIL import Image,ImageEnhance
from PIL import *
import time
# 图片切割
def segment(im):
s = 12
w = 40
h = 81
t = 0
im_new = []
for i in range(4):
im1 = im.crop((s+w*i,t,s+w*(