python爬虫之识别图片验证码

识别图片验证码

1.识别流程

  1. 获取图片生成的url,进而获取要识别的验证码
  2. 通过第三方库识别验证码
  3. 输出识别结果

2.识别方法

我们这里通过chaojiying(付费,识别度高)和Tesseract(免费,对于中文识别程度较差)进行识别。

3.操作

3.1.基本框架

我们以登陆人人网为例,进行识别验证码的操作。

首先,我们进入人人网,获取人人网验证码图片的地址,
在这里插入图片描述
注意,这里rnd是随机生成的因此,我们需要用random模块,随机输出。

我们登录人人网,并通过fiddler工具获取登录所需要的相关参数。以下是除识别验证码代码的基本框架,

import requests
import random

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.56",
}


def get_code():
    url = "http://icode.renren.com/getcode.do?t=web_login&rnd={}".format(random.random())
    # 使用random.random()格式化url地址
    res = requests.get(url, headers=headers)

    # 保存图片,二进制写入
    with open('code.jpg', 'wb') as fp:
        fp.write(res.content)
        fp.flush()  # 不用回车就往里写
    
    """
    识别验证码区域代码(待完成)
    """


def login(code):
    # 通过fiddler抓取相关参数和传入参数的地址
    url = "http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=202063121980"
    data = {
        'email': '账号',
        'password': '密码',
        'icode': code,  # 识别出的验证码结果
        'origURL': 'http://www.renren.com/home',
        'domain': 'renren.com',
        'kwy_id': 1,
        'captcha_type': 'web_login',
        'f': 'http://www.renren.com/974712722',  # 跳转地址
    }
    res = session.post(url, headers=headers, data=data)
    # session对象保存了我们登陆后的信息,后期请求个人中心是携带着登陆信息的
    res = res.content.decode()
    print(res)


def get_profile():
    url = "http://www.renren.com/974712722/profile"
    res = session.get(url, headers=headers)
    result = res.content.decode()
    print(result)


if __name__ == '__main__':
    session = requests.session()  # 创建一个session对象存放会话数据

    # 获取验证码图片,交给第三方打码平台进行识别
    code = get_code()

    # 登录
    login(code)

    # 获取个人中心页
    get_profile()
3.2.chaojiying识别图片验证码

我们登录超级鹰首页,并注册。

进入开发文档,下载python开发文档。解压,放入python文件目录。

以下为识别图片验证码的代码,

chaojiying = Chaojiying_Client('超级鹰用户名', '密码', '软件ID')  # 用户中心>>软件ID 生成软件ID
    im = open('code.jpg', 'rb').read()  # 读取图片
    result = chaojiying.PostPic(im, 1902)['pic_str']  # 识别验证码
    return result  # 返回验证码
3.3.Tesseract识别图片验证码

Tesseract是一个OCR库,目前由谷歌赞助。Tesseract是目前公认最优秀、最准确的开源OCR库。Tesseract具有很高的识别度,也具有很高的灵活性,他可以通过训练识别任何字体。

安装包下载

安装完成后,我们需要将Tesseract安装位置添加到Path环境变量中。

我们可以在cmd中使用代码实现识别图片内容,

tesseract 图片路径 结果存放路径

在python中,我们需要先安装pytesseract,

pip install pytessseract

使用以下代码来识别图片,

import pytesseract
from PIL import Image  # 安装pillow

pytesseract.pytesseract.tesseract_cmd = r"tesseract.exe位置路径"  # 设置tesseract.exe位置路径
image = Image.open('code.jpg')  # 打开图片

text = pytesseract.image_to_string(image, lang='eng')  # 识别
print(text)

如果要用Tesseract识别中文,需要在源码地址中的tessdata_best文件中下载chi_sim.traineddata训练数据并将其放入Tesseract安装目录中的tessdata文件夹下。

注意,因为中文训练数据过于陈旧,因此中文识别准确度不高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值