真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python3爬蟲如何實現(xiàn)識別點觸點選驗證碼-創(chuàng)新互聯(lián)

小編這次要給大家分享的是Python3爬蟲如何實現(xiàn)識別點觸點選驗證碼,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

為涵江等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及涵江網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站制作、涵江網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

上一節(jié)我們實現(xiàn)了極驗驗證碼的識別,但是除了極驗其實還有另一種常見的且應(yīng)用廣泛的驗證碼,比較有代表性的就是點觸驗證碼。

可能你對這個名字比較陌生,但是肯定見過類似的驗證碼,比如 12306,這就是一種典型的點觸驗證碼,如圖所示:

Python3爬蟲如何實現(xiàn)識別點觸點選驗證碼

我們需要直接點擊圖中符合要求的圖,如果所有答案均正確才會驗證成功,如果有一個答案錯誤,驗證就會失敗,這種驗證碼就可以稱之為點觸驗證碼。

另外還有一個專門提供點觸驗證碼服務(wù)的站點,叫做 TouClick,其官方網(wǎng)站為:https://www.touclick.com/,本節(jié)就以它為例講解一下此類驗證碼的識別過程。

1. 本節(jié)目標(biāo)

本節(jié)我們的目標(biāo)是用程序來識別并通過點觸驗證碼的驗證。

2. 準(zhǔn)備工作

本次我們使用的 Python 庫是 Selenium,使用的瀏覽器為 Chrome,在此之前請確保已經(jīng)正確安裝好了 Selenium 庫、Chrome瀏覽器并配置好了 ChromeDriver,相關(guān)流程可以參考第一章的說明。

3. 了解點觸驗證碼

TouClick 官方網(wǎng)站的驗證碼樣式如圖 8-19 所示:

Python3爬蟲如何實現(xiàn)識別點觸點選驗證碼

和 12306 站點有相似之處,不過這次是點擊圖片中的文字,不是圖片了,另外還有各種形形色色的點觸驗證碼,其交互形式可能略有不同,但基本原理都是類似的。

接下來我們就來統(tǒng)一實現(xiàn)一下此類點觸驗證碼的識別過程。

4. 識別思路

此種驗證碼的如果依靠圖像識別的話識別難度非常之大。

例如就 12306 來說,其識別難點有兩個點,第一點是文字識別,如圖 8-20 所示:

Python3爬蟲如何實現(xiàn)識別點觸點選驗證碼

如點擊圖中所有的漏斗,“漏斗”二字其實都經(jīng)過變形、放縮、模糊處理了,如果要借助于前面我們講的 OCR 技術(shù)來識別,識別的精準(zhǔn)度會大打折扣,甚至得不到任何結(jié)果。第二點是圖像的識別,我們需要將圖像重新轉(zhuǎn)化文字,可以借助于各種識圖接口,可經(jīng)我測試識別正確結(jié)果的準(zhǔn)確率非常低,經(jīng)常會出現(xiàn)匹配不正確或匹配不出結(jié)果的情況,而且圖片本身的的清晰度也不夠,所以識別難度會更大,更何況需要同時識別出八張圖片的結(jié)果,且其中幾個答案需要完全匹配正確才能驗證通過,綜合來看,此種方法基本是不可行的。

再拿 TouClick 來說,如圖所示:

Python3爬蟲如何實現(xiàn)識別點觸點選驗證碼

我們需要從這幅圖片中識別出植株二字,但是圖片的背景或多或少會有干擾,導(dǎo)致 OCR 幾乎不會識別出結(jié)果,有人會說,直接識別白色的文字不就好了嗎?但是如果換一張驗證碼呢?如圖 8-22 所示:

Python3爬蟲如何實現(xiàn)識別點觸點選驗證碼

這張驗證碼圖片的文字又變成了藍(lán)色,而且還又有白色陰影,識別的難度又會大大增加。

那么此類驗證碼就沒法解了嗎?答案當(dāng)然是有,靠什么?靠人。

靠人解決?那還要程序做什么?不要急,這里說的人并不是我們自己去解,在互聯(lián)網(wǎng)上存在非常多的驗證碼服務(wù)平臺,平臺 7×24 小時提供驗證碼識別服務(wù),一張圖片幾秒就會獲得識別結(jié)果,準(zhǔn)確率可達(dá) 90% 以上,但是就需要花點錢來購買服務(wù)了,畢竟平臺都是需要盈利的,不過不用擔(dān)心,識別一個驗證碼只需要幾分錢。

在這里我個人比較推薦的一個平臺是超級鷹。

其提供的服務(wù)種類非常廣泛,可識別的驗證碼類型非常多,其中就包括此類點觸驗證碼。

另外超級鷹平臺同樣支持簡單的圖形驗證碼識別,如果 OCR 識別有難度,同樣可以用本節(jié)相同的方法借助此平臺來識別,下面是此平臺提供的一些服務(wù):

英文數(shù)字,提供最多20位英文數(shù)字的混合識別

中文漢字,提供最多7個漢字的識別

純英文,提供最多12位的英文的識別

純數(shù)字,提供最多11位的數(shù)字的識別

任意特殊字符,提供不定長漢字英文數(shù)字、拼音首字母、計算題、成語混合、 集裝箱號等字符的識別

坐標(biāo)選擇識別,如復(fù)雜計算題、選擇題四選一、問答題、點擊相同的字、物品、動物等返回多個坐標(biāo)的識別

而本節(jié)我們需要解決的就是屬于最后一類,坐標(biāo)多選識別的情況,我們需要做的就是將驗證碼圖片提交給平臺,然后平臺會返回識別結(jié)果在圖片中的坐標(biāo)位置,接下來我們再解析坐標(biāo)模擬點擊就好了。

原理非常簡單,下面我們就來實際用程序來實驗一下。

5. 注冊賬號

在開始之前,我們需要先注冊一個超級鷹賬號并申請一個軟件ID,注冊頁面鏈接為:https://www.chaojiying.com/user/reg/,注冊完成之后還需要在后臺開發(fā)商中心添加一個軟件ID,最后一件事就是充值一些題分,充值多少可以根據(jù)價格和識別量自行決定。

6. 獲取API

做好上面的準(zhǔn)備工作之后我們就可以開始用程序來對接驗證碼的識別了。

首先我們可以到官方網(wǎng)站下載對應(yīng)的 Python API,鏈接為:https://www.chaojiying.com/api-14.html,但是此 API 是Python2 版本的,是用 Requests 庫來實現(xiàn)的,我們可以簡單更改幾個地方即可將其修改為 Python3 版本。

修改之后的API如下:

import requests
from hashlib import md5
class Chaojiying(object):
    def __init__(self, username, password, soft_id):
        self.username = username
        self.password = md5(password.encode('utf-8')).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 post_pic(self, im, codetype):
        """
        im: 圖片字節(jié)
        codetype: 題目類型 參考 http://www.chaojiying.com/price.html
        """
        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 report_error(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()

網(wǎng)頁題目:Python3爬蟲如何實現(xiàn)識別點觸點選驗證碼-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/cogpcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部