写网路爬虫最讨厌的事莫过于遇到网站需要验证码,去 google 「网站验证码 破解」也会看到一堆文章,无奈一大半都是从对岸翻译的,很多都不能用,花了点时间实际用证交所买卖日报表的验证码来测试,简单整理了一下笔记
工人智慧
你没看错我没写错,真的是「工人智慧」,不是「人工智慧」
代表的网站有这两间
它们的原理很简单,就是用低价去人力成本低廉的地方找人来分辨验证码回传赚取价差。
由网站提供介面和 API,客户注册后使用网站提供的 API 上传需要破解的验证码,网站收到需求后分配给线上的工作人员,工作人员辨识完成后回传。根据网站的说法,普通工作人员每月约能赚 100 美金左右,在印度、巴基斯坦..等国家已经算不错的薪资了,而且只需要一台电脑或手机就能工作,还有工作人员的故事,其实我还蛮配服想到这个方法的人,也不算是剥削工作人员,只能说是各取所需吧
我有列入考虑,但最后没真的去测试,不过相信辨识率应该不差,毕竟是真人辨识的,而且价格对我们而言不高,1000个验证码约为 0.5~1 美元,真的要用也在可以负担的范围能力内
列入考虑Tesseract
tesseract 是 google 的 OCR 文字辨识,大概也是找到最多文章说能够拿来破解验证码的方法
Python 有几个 library,底层都是用 tesseract,像是
使用上需要先下载 tesseract,不过官方并没有提供 windows 的安装档,如果需要在本机测试的话,要先到 3rd party找安装档,下载连结如下:下载连结
程式写起来很简单,我是测试 pytesseract,基本上就是用官网的 sample code 就可以了,但如果你的目的是证交所的买卖日报表的话,可以不用试了,我实测结果是无法辨识
,不管是基本用法或是网路上其他的文章说的什么 灰度处理、降噪,都没有用
,只能说买卖日报表的验证码做的还不差吧。毕竟 OCR 本来的目的就只是要做一般文字辨识,不是拿来辨识验证码的
Amazon Textract
Amazon Textract 是 AWS 提供的文字辨识工具,要使用的前提是要有 AWS 帐号,这个服务看官网说明是要收费的,但是我测试了 20笔资料,没看到帐单有费用,但如果你的目的是证交所的买卖日报表的话,也可以不用试了,我实测结果 20笔资料,只辨识成功 1笔,辨识成功率 5%
,不过好像也不能怪 AWS,毕竟这个工具和 OCR 一样,本来就不是设计来辨识验证码的
Deep Learning | CNN
在测试前,我就认为这个应该是正解,毕竟如果连 CNN 都搞不定,大概就只能去用工人智慧了
不过网路上说什么「十五分钟实战」,一堆对岸的文章看看就好,基本上用 Deep Learning 有一定的进入门槛在,如果没学过怎么用 AI 建模型,不要说十五分钟,十五天都不一定学的会。为了破解个验证码,还要去学 CNN 好像 CP 值太低了点。
不过在这个套件当道的时候,应该有些好心人会封装出好用的套件吧,然后我找到 ddddocr
ddddocr 带带弟弟OCR通用验证码识别SDK免费开源版
有点中二的名字,大陆人写的,从说明来看,底层就是 deep learning,只是已经先帮我们建好模型了,同样实测 20笔资料,成功了 14笔,辨识成功率 70%
,虽然看起来不太高,但实务上我觉得够用了,反正辨识失败就再换个验证码再来一次就好
实测记录
也只有 Amazon Textract 和 ddddocr
图片 | Amazon Textract | ddddocr (1.3) |
---|---|---|
N/A | X8NFG | |
7U9kM | 7U9Kt | |
m TO | GRNLL | |
LX24P | lx24D | |
N/A | 99UV | |
N/A | Z4N86 | |
RCRE | RCREC | |
N/A | K22PA | |
6KGCK | 6Kgc | |
EH | J83EH | |
N | 2R9N8 | |
Z:3KRF | Z3KRF | |
8YRD | 98yrd | |
N/A | 4YA7 | |
6P.G | 6A2G | |
PTGR | PZGRZ | |
APNHO | APNHG | |
N/A | Y7JPJ | |
DOQ | JDQQJ | |
TKQHA | 7KQHA |