1. 程式人生 > Python爬蟲入門教學 >19 第三方打碼平臺進行復雜驗證碼的識別

19 第三方打碼平臺進行復雜驗證碼的識別

上節課我們使用了 Pyesseract 進行了簡單的驗證碼圖片識別,但是通過上節課的效果來看 Pyesseract 的效果似乎並不是很好,如果碰到一些複雜的驗證碼估計就得歇菜了。但是我們在爬蟲開發中會遇到的驗證碼可以說是形形色色,各種各樣,幾乎都快玩出花來了。

不妨設想一下,如果爬蟲遇到了 Pyesseract 無法識別的驗證碼該怎麼辦呢?難道爬蟲就不寫了嗎?我覺得老闆可能不太願意啊,所以這節課給你推薦另一種驗證碼識別方式,那就是 – 第三方打碼平臺。

俗話說三個臭皮匠還頂個諸葛亮呢,我們在實際開發中遇到解決不了的難題的時候一定不要在那裡悶頭坐著死扣,一定要善用搜索引擎。程式設計這個行業發展了這麼多年,沒準你碰到的問題早就被別人解決了還把解決問題的方法分享了出來呢

本節課學習目標

能夠熟練的使用一種第三方打碼平臺識別驗證碼。

1. 常見的第三方打碼平臺

平時常用的打碼平臺有:超級鷹,雲打碼,打碼兔,聯眾打碼,超人打碼,斐斐打碼,91打碼等。讀者可以更加自己的需要自行選擇。

2. 打碼平臺進行打碼步驟

使用第三方平臺進行打碼,通常需要四個步驟。我們這裡使用超級鷹打碼平臺進行示範。

  1. 首先選擇一個打碼平臺進行註冊

由於不同平臺,註冊的流程不一樣,這裡不再截圖演示。註冊完成後,如果沒有提供免費適用的功能,我們需要充值才能正確的使用介面。每個平臺,都會有自己的開發文件,我們按照開發文件的示列進行改寫就可以直接使用了。

  1. 需要進行充值

如果只是簡單的測試,可以充值較小的金額,由於是第三方平臺,無法保證網站是持久可用的,充值須謹慎。

  1. 獲取網站的程式ID

充值完成後,我們會獲得一個程式ID,把這個ID放入到介面中,方便第三方平臺進行校驗。

  1. 上傳驗證碼,返回呼叫結果

3. 打碼平臺對接例子

接下來我們用一個簡單的例子來具體演示一下上面的步驟:

這裡,我們隨便選擇了一個打碼平臺的介面例子來進行講解。

關於如何在打碼平臺上進行註冊和查詢介面文件,由於打碼平臺的不穩定性,這裡不做推薦,讀者可以自行百度,選擇適合自己的平臺進行註冊和使用。在確定打碼平臺的可靠性的前提下,再進行充值。謹防被騙!

我們接下來通過打碼平臺驗證如下驗證碼,驗證碼圖片如下:

圖片描述

程式碼如下:


#!/usr/bin/env python
# coding:utf-8
import requests from hashlib import md5 #客戶端類 class My_Client(object): #初始化 def __init__(self, username, password, soft_id): self.username = username self.password = password.encode('utf8') self.password = md5(password).hexdigest() self.soft_id = soft_id self.base_params = { 'user': self.username, 'pass2': self.password, 'softid': self.soft_id, } self.headers = { 'Connection': 'Keep-Alive', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)', } #上傳圖片 def PostPic(self, im, codetype): """ im: 圖片位元組 codetype: 題目型別 """ params = { 'codetype': codetype, } params.update(self.base_params) files = {'userfile': ('ccc.jpg', im)} r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers) return r.json() #錯誤反饋 def ReportError(self, im_id): """ im_id:報錯題目的圖片ID """ params = { 'id': im_id, } params.update(self.base_params) r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers) return r.json() if __name__ == '__main__': chaojiying = My_Client('XXX', 'XXX', 'XXX') im = open('a.jpg', 'rb').read() print(chaojiying.PostPic(im, XXX))

上述程式碼,我們總共有三個方法,分別是初始化,上傳圖片和錯誤反饋。初始化主要是初始化一些基本的資訊,這些可以在打碼平臺註冊的地方獲取。另外,打碼平臺還會提供一個打碼平臺提供的識別碼SoftId。初始化成功後,我們上傳驗證碼,最後打印出結果。可以看到結果為7261,跟驗證碼裡面的文字一致。

執行結果如下

圖片描述

4. 小結

由於打碼平臺良莠不齊,讀者選擇打碼平臺的時候,需要選一些知名的企業,另外,使用打碼的平臺的時候,需要按照不同平臺的規定介面進行呼叫,不同打碼平臺的規範是不一樣的。