python通過pillow識別動態(tài)驗(yàn)證碼的示例代碼
生活中,我們在登錄微博,郵箱的時候,常常會碰到驗(yàn)證碼。在工作時,如果想要爬取一些數(shù)據(jù),也會碰到驗(yàn)證碼的阻礙。本次試驗(yàn)將帶領(lǐng)大家認(rèn)識驗(yàn)證碼的一些特性,并利用 Python 中的 pillow 庫完成對驗(yàn)證碼的破解。
環(huán)境配置
- Python 2.7
- Pillow 模塊
有個問題就是python2.7目前只能讓使用到2020年,現(xiàn)在再利用2.7下載好多東西都會報(bào)錯,也該是時候更新到python3.7了,本文還是依賴于2.7的環(huán)境。
識別驗(yàn)證碼的代碼下載地址:python_captcha_jb51.rar
?安裝 pillow(PIL)庫
sudo apt-get update sudo apt-get install python-dev libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk sudo pip2 install pillow
識別過程
將驗(yàn)證碼文件python_captcha下載到運(yùn)行目錄下,解壓后,在 python_captcha 目錄新建 crack.py 文件,進(jìn)行編輯。
#-*- coding:utf8 -*- from PIL import Image im = Image.open("captcha.gif") #(將圖片轉(zhuǎn)換為8位像素模式) im.convert("P") # 打印顏色直方圖 print im.histogram()
輸出:
顏色直方圖的每一位數(shù)字都代表了在圖片中含有對應(yīng)位的顏色的像素的數(shù)量。
每個像素點(diǎn)可表現(xiàn) 256 種顏色,你會發(fā)現(xiàn)白點(diǎn)是最多(白色序號 255 的位置,也就是最后一位,可以看到,有 625 個白色像素)。紅像素在序號 200 左右,我們可以通過排序,得到有用的顏色。
his = im.histogram() values = {} for i in range(256): values[i] = his[i] for j,k in sorted(values.items(),key=lambda x:x[1],reverse = True)[:10]: print j, k
輸出:
我們得到了圖片中最多的 10 種顏色,其中 220 與 227 才是我們需要的紅色和灰色,可以通過這一訊息構(gòu)造一種黑白二值圖片。
#-*- coding:utf8 -*- from PIL import Image im = Image.open("captcha.gif") im.convert("P") im2 = Image.new("P",im.size,255) for x in range(im.size[1]): for y in range(im.size[0]): pix = im.getpixel((y,x)) if pix == 220 or pix == 227: # these are the numbers to get im2.putpixel((y,x),0) im2.show()
輸出:
局限及遇到的問題
#-*- coding:utf8 -*-
此行命令流在windows環(huán)境下運(yùn)行會報(bào)錯,具體原因可參考python(2)中文編碼亂碼問題;
該命令流有很大的局限性,識別的動態(tài)代買也只有此類:
到此這篇關(guān)于python通過pillow識別動態(tài)驗(yàn)證碼的示例代碼的文章就介紹到這了,更多相關(guān)python pillow識別動態(tài)驗(yàn)證碼內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。