第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 Python 原生爬蟲教程 Python 原生爬蟲教程 19 第三方打碼平臺進(jìn)行復(fù)雜驗證碼的識別

第三方打碼平臺進(jìn)行復(fù)雜驗證碼的識別

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

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

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

本節(jié)課學(xué)習(xí)目標(biāo)

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

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

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

2. 打碼平臺進(jìn)行打碼步驟

使用第三方平臺進(jìn)行打碼,通常需要四個步驟。我們這里使用超級鷹打碼平臺進(jìn)行示范。

  1. 首先選擇一個打碼平臺進(jìn)行注冊

由于不同平臺,注冊的流程不一樣,這里不再截圖演示。注冊完成后,如果沒有提供免費(fèi)適用的功能,我們需要充值才能正確的使用接口。每個平臺,都會有自己的開發(fā)文檔,我們按照開發(fā)文檔的示列進(jìn)行改寫就可以直接使用了。

  1. 需要進(jìn)行充值

如果只是簡單的測試,可以充值較小的金額,由于是第三方平臺,無法保證網(wǎng)站是持久可用的,充值須謹(jǐn)慎。

  1. 獲取網(wǎng)站的程序ID

充值完成后,我們會獲得一個程序ID,把這個ID放入到接口中,方便第三方平臺進(jìn)行校驗。

  1. 上傳驗證碼,返回調(diào)用結(jié)果

3. 打碼平臺對接例子

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

這里,我們隨便選擇了一個打碼平臺的接口例子來進(jìn)行講解。

關(guān)于如何在打碼平臺上進(jìn)行注冊和查找接口文檔,由于打碼平臺的不穩(wěn)定性,這里不做推薦,讀者可以自行百度,選擇適合自己的平臺進(jìn)行注冊和使用。在確定打碼平臺的可靠性的前提下,再進(jìn)行充值。謹(jǐn)防被騙!

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

圖片描述

代碼如下:


#!/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: 圖片字節(jié)
        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。初始化成功后,我們上傳驗證碼,最后打印出結(jié)果。可以看到結(jié)果為7261,跟驗證碼里面的文字一致。

運(yùn)行結(jié)果如下

圖片描述

4. 小結(jié)

由于打碼平臺良莠不齊,讀者選擇打碼平臺的時候,需要選一些知名的企業(yè),另外,使用打碼的平臺的時候,需要按照不同平臺的規(guī)定接口進(jìn)行調(diào)用,不同打碼平臺的規(guī)范是不一樣的。