將驗證碼識別功能集成到現有的爬蟲框架
驗證碼的識別
過年期間我曾經寫過一篇文章《一次簡單的驗證碼識別以及思考》, 目前已經對該功能做了一些優化,可以支持幾種類型的驗證碼識別。其核心思想仍然是上一篇文章所提到的,使用tensorflow來訓練標註過的驗證碼。目前,多種類型的驗證碼訓練完之後可以放到一個模型中。未來,有新增的驗證碼類型通過訓練之後也可以整合到這個模型中。
通過多次訓練得到的經驗大致是,一種類型的驗證碼標註4000-5000個數據,就能獲得90%以上的識別準確率。
集成到爬蟲框架
爬蟲框架NetDiscovery,github地址:https://github.com/fengzhizi715/NetDiscovery
對於驗證碼的識別,最終暴露出來是一個web服務。該web服務採用Vert.x進行開發,對於爬蟲而言,只需知道它是一個web服務即可,無需知道後面的邏輯。而且,web服務的地址也可能會更換。
所以,我在爬蟲框架中封裝了一個工具方法,只需要傳入圖片的url地址就能夠返回驗證碼的內容。
測試幾張圖片
執行結果:
經過測試後,發現只有第一個驗證碼是識別錯誤的,其餘五個都能夠正確地識別出驗證碼中的數字和字母。
第一個驗證碼正確的值應該是862DF,而不是862FF。
識別完驗證碼之後,爬蟲就可以模擬「用戶」的登錄行為,登錄成功後記錄下Header中的「Set-Cookie」的值,後面的操作就可以使用這個Cookie的值。
NetDiscovery的未來
首先,NetDiscovery需要增加多種類型驗證碼的識別,需要不斷的標註數據。
其次,NetDiscovery打算做成一個比較通用的爬蟲框架,雖然最近工作比較繁忙,但是每周仍然會有代碼的提交。
下一個比較大的功能,應該是完成跟圖像框架的結合。目前NetDiscovery的selenium模塊可以實現對網頁的截圖,未來打算實現從截取的圖片中提取有用的信息。這樣從一定程度上能夠對抗反爬蟲。
關注【Java與Android技術棧】


TAG:Java與Android技術棧 |