衆所周知,python是一個很強大的語言,它擁有衆多的庫,今天我嘗試了使用python進行驗證碼的識別。
開始,我們先進行驗證碼的下載。
下載
我們先找見一個登陸需要驗證碼的網站,比如說這個網站:http://user.sc.chinaz.com/login.aspx
按F12進入調試界面,點擊network,再點一下驗證碼進行刷新
可以看到這個圖片:
點擊進入圖片就可以得到一個驗證碼的界面
此後我們再將該界面的圖片進行下載就可以得到一堆的驗證碼了。
識別:
下載完所有的代碼,我們就可以進行驗證碼的識別了。python的驗證碼識別包我們可以下載pytesseract包
當然,在下載pytesseract包之前,我們還得下載tesseract包。如果僅僅就是這樣的話那還是遠遠不夠的,會出現找不見tesseract包的錯誤,所以我們還需要下載Tesseract-OCR
具體的下載方式可以參考博文:Tesseract-OCR下載和安裝
如果還出現錯誤的話,可以參考這篇博文:python3.5 tesseract-ocr 驗證碼識別錯誤解決方案
以上兩篇博文基本上可以解決下載tesseract的很多錯誤了(親測,有效)
好了,上代碼:
import requests,urllib,pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = 'D:/Tesseract-OCR/tesseract.exe'
tessdata_dir_config = '--tessdata-dir "D:/Tesseract-OCR/tessdata"'
url = 'http://user.sc.chinaz.com/getcode.aspx?h=30&t=0.7468559373230685' #驗證碼網址,可以根據需求更換
storeurl = 'C:/Users/11037/Desktop/yanzhengma' #保存本地文件夾
def savaImg(picurl,saveurl): #存儲圖片函數
bytes = urllib.request.urlopen(picurl)
file = open(saveurl,'wb')
file.write(bytes.read())
file.flush()
file.close()
return True
def getpicture(): #獲取驗證碼函數
coun = int(input('請輸入需要下載的驗證碼數量:'))
for i in range(coun):
theurl = storeurl + '/' + str(i) + '.jpg'
if savaImg(url,theurl):
print('已下載:'+str(i+1))
def jpgtostring(pictureurl): #圖片轉驗證碼函數
print('圖片源地址:'+pictureurl)
picture = Image.open(pictureurl)
result = pytesseract.image_to_string(picture,lang='eng',config=tessdata_dir_config)
print(result)
pictureurl = 'C:/Users/11037/Desktop/yanzhengma/1.jpg'
jpgtostring(pictureurl)
驗證碼原圖:
運行結果: