Python爬蟲入門教程 56-100 python爬蟲高階技術之驗證碼篇2-開放平臺OCR技術
今天你要學習的驗證碼採用通過第三方AI平臺開放的OCR介面實現,OCR文字識別技術目前已經比較成熟了,而且第三方比較多,今天採用的是百度的。
註冊百度AI平臺
官方網址:ai.baidu.com/
接下來申請

接下來建立一個簡單應用之後,就可以使用了,我們找到

閱讀文字識別相關文件
你需要具備基本的閱讀第三方文件的能力,開啟我們需要的文件
這個頁面基本上已經把我們需要做的所有內容都已經標識清楚了
編寫獲取accesstoken的程式碼
在目前主流的API開發模式下,都是需要你進行accesstoken的獲取的
程式碼如下 ,重點需要參照文件進行傳參的設計

def get_accesstoken(self): res = requests.post(self.url.format(self.key,self.secret),headers=self.header) content = res.text if (content): return json.loads(content)["access_token"] 複製程式碼
得到accesstoken之後,你可以繼續下面的操作
import requests import json import base64 import urllib.request, urllib.parse class GetCode(object): def __init__(self): self.url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}" self.api = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token={}" self.header = { "Content-Type":'application/json; charset=UTF-8' } self.key = "你的KEY" self.secret = "你的SECRET" 複製程式碼
驗證碼識別階段
普通沒有干擾的驗證碼,我們直接識別即可,但是有的驗證碼還是有干擾的,在識別之前,需要對它進行基本的處理,我們採用和上篇文章類似的辦法進行,對它進行灰度處理和二值化操作。部分程式碼我直接硬編碼了,不過最終識別的效果並沒有比想象的優化多少。
def init_table(self,threshold=155): table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) return table def opt_image(self): im = Image.open("66.png") im = im.convert('L') im = im.point(self.init_table(), '1') im.save('66_s.png') return "66_s.png" 複製程式碼
呼叫驗證碼介面
呼叫百度的驗證碼介面,不使用百度給的模組直接編寫。按照它對應的文件,書寫即可。 在這個地方尤其注意官方文件提示

def get_file_content(self,file_path): with open(file_path, 'rb') as fp: base64_data = base64.b64encode(fp.read()) s = base64_data.decode() data = {} data['image'] = s decoded_data = urllib.parse.urlencode(data) return decoded_data def show_code(self): image = self.get_file_content(self.opt_image()) headers = { "Content-Type":"application/x-www-form-urlencoded" } res = requests.post(self.api.format(self.get_accesstoken()),headers=headers,data=image) print(res.text) 複製程式碼
通過百度模組呼叫驗證碼識別
安裝百度AI
pip install baidu-aip
安裝之後,就可以使用啦
- 宣告一些常量,你在百度建立應用之後就可以獲取
- 初始化文字識別類
- 呼叫對應的方法

參考程式碼
from aip import AipOcr # 定義常量 APP_ID = '15736693' API_KEY = '你的KEY' SECRET_KEY = '你的SECRET' # 初始化文字識別 aipOcr=AipOcr(APP_ID, API_KEY, SECRET_KEY) # 讀取圖片 filePath = "1.jpg" def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() # 定義引數變數 options = { 'detect_direction': 'true', 'language_type': 'CHN_ENG', } # 網路圖片文字文字識別介面 result = aipOcr.webImage(get_file_content(filePath),options) print(result) 複製程式碼
編碼後記
這種通過第三方OCR技術識別驗證碼的方式,本質上和上篇文章的原理是一致的 在實測過程中發現,沒有太多幹擾線, 搜狗
, 騰訊
, 有道
基本表現一致
對於這種方式,學會即可~,道理都是一致的,當然你可以用Python實現一個圖片轉文字的小應用是沒有任何問題的
歡迎關注非本科程式設計師公眾賬號, 傳送 ocr 獲取原始碼
