爬虫之验证码处理

验证码处理

一、 字符验证码

通过某个程序,计算机产生一个字符串,一般四位,包含数字、字母、中文

1、 难点

  1. 噪点
  2. 干扰线
  3. 重叠
  4. 颜色
  5. 变形

经过这么一些的操作之后,程序会生成一张图片,而我们要做的就是输入和图片里面的文本信息一致,才算通过校验

2、 图像处理

在数字世界中,有色彩模式这一算法,来表示各种颜色

比较常见的有RGB模式,HSL模式等

基础知识

  1. RGB通道

    一张彩色图片,包含着R、G、B三个通道,每一个通道用(0, 255)来表示,越接近0,表示该通道的色彩越淡

  2. 像素

    像素是图形单元的 简称,它是位图最小的完整单位。像素具有两种属性:一种是相对于位图图像中的其他像素来说,一个像素具有一个特定的位置;另一种是具有可以用位来度量的颜色深度

  3. 图像分辨率

    图像分辨率通常是指每英寸中像素的个数,用ppi表示。图像分辨率取决于显示图像的大小。分辨率与图像清晰程度成正比。分辨率越高,图像越清晰,当然产生的图形图像文件越大,在图形处理是所需计算机的内存较多,同时CPU处理的时间也就越长

使用PIllow库进行图像处理

3、 实例代码

识别古诗文网的图形验证码:https://so.gushiwen.cn/RandCode.ashx

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: A.L.Kun
# @file : demo01.py
# @time : 2022/4/25 15:22
from requests import get
from PIL import Image
import pytesser3  # 注意,要安装tesseract
from io import BytesIO  # 内存IO,将数据写入到内存中去,不会产生文件

img_url = "https://so.gushiwen.cn/RandCode.ashx"  # 生成验证码的网址
img_data = BytesIO(get(img_url).content)  # 里面传入二进制数据
img = Image.open(img_data)  # 打开验证码图片
img = img.convert("L")  # 将图片转换为灰度图
# 获取阈值阈值可以通过数组来获取,这里默认方便,默认阈值为175
avg = 175
# 二值化处理
w, h = img.size  # 获取图片的大小
pixes = img.load()  # 获取照片的像素
for x in range(w):
    for y in range(h):
        if pixes[x, y] < avg:
            pixes[x, y] = 0
        else:
            pixes[x, y] = 255
# 去除噪点
for x in range(1, w - 1):
    for y in range(1, h - 1):
        count = 0  # 统计周边摆设像素的个数
        if pixes[x, y - 1] > 245:  # 如果上面的像素的颜色为白色
            count += 1
        if pixes[x, y + 1] > 245:  # 如果下面的像素的颜色白色
            count += 1
        if pixes[x - 1, y] > 245:  # 如果左边的像素的颜色为白色
            count += 1
        if pixes[x + 1, y] > 245:  # 如果右边的像素的颜色为白色
            count += 1
        if pixes[x - 1, y - 1] > 245:  # 如果左上面的像素的颜色为白色
            count += 1
        if pixes[x - 
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveKenny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值