简单识别图形验证码
目前,不少网站为了防止用户利用爬虫自动注册、登录等,都采用了验证码技术。但是,人们也已经研究出了破解之策,这些网站的注册/登录页面经常会遭到网络机器人的垃圾注册。
事实上,大多数网站生成的图片验证码都具有以下几个特性:
服务器动态生成的图片。虽然验证码图片对应的节点属性src跟普通的图片不太一样,但是可以和其它图片一样进行下载和处理。
验证码的答案存储在服务器端的数据库中。
很多验证码都有时间限制,若太长时间没有解决,则会失效。
通常情况下,验证码的处理思路为:
(1) 将网站的验证码图片下载到硬盘中,使用PIL库处理干净(如图片降噪、图片切割等)。
(2) 利用Tesseract技术识别图片中的文字。
(3) 返回符合网站要求的识别结果。
接下来,就使用一个小案例来对使用pytesseract技术识别图像验证码的功能加以应用。我们准备了10张验证码图片,这些图片及图片名称如图1所示,在项目中将从这些图片中随机选取1张进行验证码识别。
图1 验证码图片
我们在PyCharm中创建一个项目,取名为ocr。在ocr项目下新建文件夹,取名为“images”,将准备好的10张图片拷贝到“images”文件夹下。
然后在ocr项目下创建一个Python文件,取名为textInPic.py,在该文件中添加代码,从10张图片中随机选取1张进行识别,并将识别出的文本输出到控制台。textInPic.py文件内的代码如下所示。
from random import randint
import pytesseract
from PIL import Image
#随机获取一个本地验证码图片的名称
picName = str(randint(0,9)) + '.png'
#加载图片
image = Image.open('images/' + picName)
#从图片中识别验证码
text = pytesseract.image_to_string(image)
#输出图片名称和识别到的验证码文字
print(picName + ":" + text)
运行代码,它的一次输出结果可能如下所示。
6.png:9527