上節課我們使用了 Pyesseract 進行了簡單的驗證碼圖片識別,但是通過上節課的效果來看 Pyesseract 的效果似乎并不是很好,如果碰到一些復雜的驗證碼估計就得歇菜了。但是我們在爬蟲開發中會遇到的驗證碼可以說是形形色色,各種各樣,幾乎都快玩出花來了。
不妨設想一下,如果爬蟲遇到了 Pyesseract 無法識別的驗證碼該怎么辦呢?難道爬蟲就不寫了嗎?我覺得老板可能不太愿意啊,所以這節課給你推薦另一種驗證碼識別方式,那就是 – 第三方打碼平臺。
俗話說三個臭皮匠還頂個諸葛亮呢,我們在實際開發中遇到解決不了的難題的時候一定不要在那里悶頭坐著死扣,一定要善用搜索引擎。編程這個行業發展了這么多年,沒準你碰到的問題早就被別人解決了還把解決問題的方法分享了出來呢
本節課學習目標:
能夠熟練的使用一種第三方打碼平臺識別驗證碼。
1. 常見的第三方打碼平臺
平時常用的打碼平臺有:超級鷹,云打碼,打碼兔,聯眾打碼,超人打碼,斐斐打碼,91打碼等。讀者可以更加自己的需要自行選擇。
2. 打碼平臺進行打碼步驟
使用第三方平臺進行打碼,通常需要四個步驟。我們這里使用超級鷹打碼平臺進行示范。
- 首先選擇一個打碼平臺進行注冊
由于不同平臺,注冊的流程不一樣,這里不再截圖演示。注冊完成后,如果沒有提供免費適用的功能,我們需要充值才能正確的使用接口。每個平臺,都會有自己的開發文檔,我們按照開發文檔的示列進行改寫就可以直接使用了。
- 需要進行充值
如果只是簡單的測試,可以充值較小的金額,由于是第三方平臺,無法保證網站是持久可用的,充值須謹慎。
- 獲取網站的程序ID
充值完成后,我們會獲得一個程序ID,把這個ID放入到接口中,方便第三方平臺進行校驗。
- 上傳驗證碼,返回調用結果。
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. 小結
由于打碼平臺良莠不齊,讀者選擇打碼平臺的時候,需要選一些知名的企業,另外,使用打碼的平臺的時候,需要按照不同平臺的規定接口進行調用,不同打碼平臺的規范是不一樣的。
聲明:本文由網站用戶香香發表,超夢電商平臺僅提供信息存儲服務,版權歸原作者所有。若發現本站文章存在版權問題,如發現文章、圖片等侵權行為,請聯系我們刪除。