寫網路爬蟲最討厭的事莫過於遇到網站需要驗證碼,去 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 |