python爬虫之图形验证码学习

1. Tesseract介绍

有时候我们在登录或者请求一些数据时候会遇到图形验证码。因此我们引入一种能将图片翻译成文字的技术。将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition),简写为OCR。
实现OCR的库不是很多,特别是开源的。因为这块存在一定的技术壁垒(需要大量的数据、算法、机器学习、深度学习知识等),并且如果做好了具有很高的商业价值。因此开源的比较少。
这里就介绍一个图形识别开源库Tesseract。Tesseract是⼀个将图像翻译成文字的OCR(光学文字识别,Optical Character Recognition),目前由谷歌赞助。Tesseract是目前公认最优秀、最准确的开源OCR库。Tesseract具有很高的识别度,也具有很高的灵活性,他可以通过训练识别任何字体。

2. Tesseract安装

Windows系统安装可以在以下链接下载可执行文件:
https://github.com/tesseract-ocr/

安装步骤分为:
(1)在Python中调用Tesseract:

pip install pytesseract

(2)安装可执行文件,设置环境变量
安装完成后,如果想要在命令行中使用Tesseract,那么应该设置环境变量。Mac和Linux在安装的时候就默认已经设置好了。在Windows 下把tesseract.exe所在的路径添加到PATH环境变量中。还有一个环境变量需要设置的是,要把训练的数据文件路径也放到环境变量中。在环境变量中, 添加一个

TESSDATA_PREFIX=D:\Tesseract-OCR\tessdata

进⼊cmd输⼊下面的命令查看版本,正常运行则安装成功

tesseract --version

在这里插入图片描述
在这里插入图片描述
识别的语言只有两种语言,若要识别中文语言,需要下载语言安装包
URL地址:https://github.com/tesseract-ocr/tessdat

3. Tesseract使用

案例1

import pytesseract
from PIL import Image # Pillow 图像处理库 2011年

# 指定tesseract驱动的路径和数据包的路径
pytesseract.pytesseract.tesseract_cmd = r"D:\Tesseract\Tesseract-OCR\tesseract.exe"
tessdata_dir_config = r'--tessdata-dir "D:\Tesseract\Tesseract-OCR\tessdata"'
# 打开图片
image = Image.open('demo.jpg')
# 识别的结果 第一个参数是图片 第二个参数是语言 第三个参数是 配置
result = pytesseract.image_to_string(image, lang='eng',  config=tessdata_dir_config)
result_strip = result.replace(' ','')
print(result,'\n',result_strip,)
# 7 3 6 4 
#  7364

在这里插入图片描述
案例2

import pytesseract
from PIL import Image
from urllib import request
import time

# 指定tesseract驱动的路径和数据包的路径
pytesseract.pytesseract.tesseract_cmd = r"D:\Tesseract\Tesseract-OCR\tesseract.exe"
tessdata_dir_config = r'--tessdata-dir "D:\Tesseract\Tesseract-OCR\tessdata"'

# 识别验证码图片
while True:
    # 获取图片验证码的地址
    url = 'https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891'
    # 第一个参数目标url 第二个参数 文件名/保存的路径
    request.urlretrieve(url,'captcha.png')
    # 打开图片
    image = Image.open('captcha.png')
    # 结果
    result = pytesseract.image_to_string(image, lang='eng', config=tessdata_dir_config)
    print(result.replace(' ',''))
    time.sleep(2)

在这里插入图片描述
在这里插入图片描述

4. 打码云平台

在这里简单介绍一个识别验证码的平台,需要花费去帮忙识别验证码,但是价格相对较便宜。有需要的可以去看看
http://www.ttshitu.com/
网址如上,操作的python代码如下

import json
import requests
import base64
from io import BytesIO
from PIL import Image
from sys import version_info


def base64_api(uname, pwd, img):
    img = img.convert('RGB')
    buffered = BytesIO()
    img.save(buffered, format="JPEG")
    if version_info.major >= 3:
        b64 = str(base64.b64encode(buffered.getvalue()), encoding='utf-8')
    else:
        b64 = str(base64.b64encode(buffered.getvalue()))
    data = {"username": uname, "password": pwd, "image": b64}
    result = json.loads(requests.post("http://api.ttshitu.com/base64", json=data).text)
    if result['success']:
        return result["data"]["result"]
    else:
        return result["message"]
    return ""


if __name__ == "__main__":
    img_path = "C:/Users/Administrator/Desktop/file.jpg"   #  图片路径位置
    img = Image.open('captcha.png')    # 图片名字
    result = base64_api(uname='123', pwd='123', img=img)  # uname 是用户名字    pwd 是用户登陆密码
    print(result)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用一些图像处理库和机器学习算法来识别爬虫中的图形验证码。以下是一个基本的案例示例: 1. 首先,你需要安装需要的库,如OpenCV和Pillow。使用以下命令进行安装: ``` pip install opencv-python pip install Pillow ``` 2. 导入所需的库: ```python import cv2 from PIL import Image from pytesseract import pytesseract ``` 3. 下载并保存验证码图片。 4. 使用OpenCV库加载验证码图片,并将其转换为灰度图像: ```python image = cv2.imread('captcha.png') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ``` 5. 对图像进行预处理,以便更好地识别验证码。可以尝试使用图像二值化、降噪等技术: ```python ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) ``` 6. 使用Pillow库创建一个临时图像对象,并将处理后的图像保存到临时文件中: ```python temp_image = Image.fromarray(thresh) temp_image.save('temp.png') ``` 7. 使用Tesseract库对临时文件中的验证码进行识别: ```python captcha_text = pytesseract.image_to_string(Image.open('temp.png')) ``` 8. 最后,可以输出识别出的验证码文本: ```python print('识别结果:', captcha_text) ``` 这只是一个基本的示例,实际的验证码可能会更复杂,需要根据具体情况进行适当的调整和优化。还可以尝试使用其他机器学习算法,如卷积神经网络(CNN),来提高验证码识别的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值