原始碼 某度貼吧驗證碼識別 附帶demo和思路

2021-10-08 19:45:38 字數 2890 閱讀 2490

一般的驗證碼獲取流程分為三大步驟

前置請求, 獲取驗證碼相關引數

驗證碼請求, 獲取驗證碼

校驗請求, 通過官網判定驗證碼是否正確

通過繼承 project 類實現具體的流程utils.project

def before_process()-> dict, 返回其他流程需要的引數字典, 通過self.before_params訪問

def captcha_process() -> tuple[bytes, str], 返回驗證碼bytes和識別後的內容

def feedback_process() -> bool, 返回驗證碼反饋情況,是否正確

,

"lianzhong": ,

"target_dir": "d:/samples"

}

編寫流程:

補充const.json

在spiders包下面新建自己的爬蟲可以參考demo.py

其中spiders/demo.py是採集某度貼吧的驗證碼例子:

"""定義自己的類

"""def __init__(self):

super().__init__()

# 選擇識別服務 [muggleocr, baiduocr, lianzhong]

self.service_type = servicetype.muggleocr

# 聯眾的驗證碼型別

self.captcha_type = "1105"

# 前置頁面 (驗證碼出現的頁面,用於獲取相關引數)

self.before_url = ""

# 驗證碼頁面 用於獲取驗證碼

self.captcha_url = ""

# 提交頁面 用於校驗驗證碼是否準確

self.feedback_url = ""

def before_process(self, retry=0) -> dict:

"""前置頁面,獲取驗證碼需要 captcha_vcode_str 引數,return 引數字典提供後面流程呼叫

:param retry: 重試計數

:return: 引數字典

"""payload =

r = self.session.post("", data=payload)

resp = r.text

resp_json: dict = json.loads(resp)

if 'captcha_vcode_str' in resp_json.keys():

captcha_vcode_str = resp_json.get('captcha_vcode_str')

return

else:

print(resp_json)

return {}

def captcha_process(self) -> tuple[bytes, str]:

""":return: 返回兩個引數:驗證碼bytes內容, 返回驗證碼標籤

"""if not self.before_params.get('captcha_vcode_str'):

raise valueerror('captcha_vcode_str is miss')

captcha_bytes = self.session.get(

self.captcha_url + "?{}".format(self.before_params['captcha_vcode_str'])

).content

captcha_text = self.platform.request(captcha_bytes)

return captcha_bytes, captcha_text

def feedback_process(self, captcha_text: str) -> bool:

""":param captcha_text: 驗證碼識別結果

:return: 返回驗證狀態 [驗證碼正確, 驗證碼錯誤]

"""if not captcha_text:

return false

if len(captcha_text) != 4:

return false

if not self.before_params['captcha_vcode_str']:

raise valueerror('miss captcha_vcode_str')

payload =

r = self.session.post(self.feedback_url, data=payload)

if '' in r.text:

return true

else:

r.encoding = "gbk"

print(r.text)

return false

if __name__ == '__main__':

pass上面的採集框架原始碼:

筆者採集了19w,輕鬆訓練到97.8%識別率,使用的訓練框架是:

介紹的框架。

使用到的採集框架的原始碼:

Django驗證碼 附原始碼

一 安裝依賴 centos 第一步 yum install python devel第二步 yum install freetype devel libjpeg devel libpng devel sudo yum install libtiff devel libjpeg devel libzi...

Yii2驗證碼使用,不改原始碼實現驗證碼重新整理

1.定義驗證碼action 以sitecontroller為例 namespace useyii useyii web controller class sitecontroller extends controller 2.檢視中輸出驗證碼 useyii captcha captcha role ...

C 驗證碼識別基礎方法及原始碼

最近有朋友在搞乙個東西,已經做的挺不錯了,最後想再完美一點,於是乎就提議把這種驗證碼給k.o.了,於是乎就k.o.了這個驗證碼。達到單個識別時間小於200ms,500個樣本人工統計正確率為95 由於本人沒有相關經驗,是摸著石頭過河。本著經驗分享的精神,分享一下整個分析的思路。在各位大神面前獻醜了。是...