嘘~ 正在从服务器偷取页面 . . .

工欲善其事,必先利其器——识别验证码(1)


验证码识别

我们使用爬虫时很有可能需要登录,而现在的平台登陆时都需要验证码才能完成登录,所以我们使用爬虫模拟登录时验证码是必须要跨过的坎。一般情况下,我们使用第三方平台实现验证码的识别。

所以我在这里介绍一个识别验证码的平台——图鉴(比较常见的有超级鹰,反正其实这些平台注册、使用流程都差不多)。

首先我们打开图鉴的网址 “ http://www.ttshitu.com/ ”,点击注册



登录成功后,我们首先看一下“价格”,其实也可以在注册帐号前看一看价格,再决定是否注册。在登陆后,因为识别验证码需要登录,所以我们在使用前要确定自己的帐号里是否还有余额。我觉得这些平台的充值还是挺人性化的,,是允许我们在平台上充值一块五毛的。

我们的账号里有钱了,然后再打开开发文档。因为我们使用的是python,所以我们选择python的开发文档



将第一个脚本复制下来,用 IDLE 打开,我们看到代码部分的注释是提示我们 typeid 的参数选择。

在我们开始分析代码,代码自定义了一个函数,这个函数我们不需要看懂,重要的是下面的主程序,我们需要改的是我上面圈起来的部分,也就是运行程序时需要输入验证码的保存路径(也就是说我们需要将验证码先保存到本机),需要在程序中输入我们图鉴的账号和密码。

我这里有一张验证码,现在就让我们试试图鉴的脚本


代码如下:

import base64
import json
import requests

def base64_api(uname, pwd, img, typeid):
    with open(img, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        b64 = base64_data.decode()
    data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
    result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
    if result['success']:
        return result["data"]["result"]
    else:
        return result["message"]
    return ""


if __name__ == "__main__":
    img_path = "C:\\Users\\ASUS\\Desktop\\验证码.jpg" # 这里填写验证码的路径
    result = base64_api(uname='账号', pwd='密码', img=img_path, typeid=3)
    # 因为验证码里有数字和中文,我们 typeid 选择 3
    print(result)

结果如下


然后我们回到图鉴网站个人中心看看,结果如下


注意:
验证码的识别正确率并不是 100% 的,有时需要多次识别


文章作者: New Ass
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 New Ass !
  目录