91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

      當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 爬蟲之圖片驗(yàn)證碼處理

      爬蟲之圖片驗(yàn)證碼處理

      來(lái)源:千鋒教育
      發(fā)布人:qyf
      時(shí)間: 2022-09-19 17:39:37 1663580377

        了解常見(jiàn)驗(yàn)證碼

        在日常生活與工作中,在進(jìn)行各類設(shè)計(jì)個(gè)人賬戶安全的操作時(shí),往往需要填寫各種驗(yàn)證碼來(lái)進(jìn)行驗(yàn)證,短信、語(yǔ)音、文字、問(wèn)答、圖片、拖拽、旋轉(zhuǎn)騰挪、拼圖接圖.......千奇百怪,各種各樣,種類繁多,花樣迭起!就拿奇葩驗(yàn)證碼鼻祖的12306來(lái)說(shuō),如今我們?cè)?2306中可以碰到各種有趣,各種類型的驗(yàn)證碼的原因,要?dú)w功于為搶票事業(yè)做出巨大貢獻(xiàn)的——黃牛們,它的“進(jìn)化史”就是一部不斷與黃牛和搶票軟件“斗智斗勇”的歷史。

      Picture

        目前我們常見(jiàn)的驗(yàn)證碼,無(wú)非就是文本、圖像以及音頻這三大類。

      Picture(1)

        而當(dāng)文本驗(yàn)證碼仍容易被機(jī)器“擊破”時(shí),圖像驗(yàn)證碼就應(yīng)運(yùn)而生了。通常是會(huì)提供一些物體、動(dòng)物、植物、人、風(fēng)景之類的圖像,讓我們選擇正確的圖像進(jìn)行標(biāo)記。這就是以12306為首的圖像驗(yàn)證碼了,但是這個(gè)還不算后來(lái)圖像驗(yàn)證碼又增加了新的玩法,比如旋轉(zhuǎn)圖片,比如拼圖以及宮格,目的還是為了對(duì)抗爬蟲這些機(jī)器。

      Picture(2)

        接下來(lái)是音頻驗(yàn)證碼,這種相比前兩種數(shù)量相對(duì)要小一些,主要是會(huì)給我們一段錄音,里面有隨機(jī)的單詞或數(shù)字,有的會(huì)加一些噪音,我們基于錄音輸入其中聽(tīng)到的單詞或數(shù)字,或者把它讀出來(lái)。從安全性上來(lái)說(shuō),聲音驗(yàn)證碼比文本和圖像等級(jí)要提升一個(gè)層級(jí),因?yàn)闄C(jī)器想要聽(tīng)錄音并分辨,這個(gè)難度會(huì)非常大。

      Picture(3)

        驗(yàn)證碼的處理方案

        • 手動(dòng)輸入(input) 這種方法僅限于登錄一次就可持續(xù)使用的情況

        • 圖像識(shí)別引擎解析 使用光學(xué)識(shí)別引擎處理圖片中的數(shù)據(jù),目前常用于圖片數(shù)據(jù)提取,較少用于驗(yàn)證碼處理

        • 打碼平臺(tái) 爬蟲常用的驗(yàn)證碼解決方案

        圖像識(shí)別引擎

        OCR,即Optical Character Recognition,光學(xué)字符識(shí)別,是指通過(guò)掃描字符,然后通過(guò)其形狀將其翻譯成電子文本的過(guò)程,對(duì)應(yīng)圖形驗(yàn)證碼來(lái)說(shuō),它們都是一些不規(guī)則的字符,這些字符是由字符稍加扭曲變換得到的內(nèi)容,我們可以使用OCR技術(shù)來(lái)講其轉(zhuǎn)化為電子文本,然后將結(jié)果提取交給服務(wù)器,便可以達(dá)到自動(dòng)識(shí)別驗(yàn)證碼的過(guò)程

        tesserocr與pytesseract是Python的一個(gè)OCR識(shí)別庫(kù),但其實(shí)是對(duì)tesseract做的一層Python API封裝,pytesseract是Google的Tesseract-OCR引擎包裝器;所以它們的核心是tesseract,因此在安裝tesserocr之前,我們需要先安裝tesseract。

        圖片識(shí)別引擎環(huán)境的安裝

        1 引擎的安裝

        • mac環(huán)境下直接執(zhí)行命令

        brew install --with-training-tools tesseract

        • windows環(huán)境下的安裝 可以通過(guò)exe安裝包安裝,下載地址可以從GitHub項(xiàng)目中的wiki找到。安裝完成后記得將Tesseract 執(zhí)行文件的目錄加入到PATH中,方便后續(xù)調(diào)用。

        • linux環(huán)境下的安裝

        sudo apt-get install tesseract-ocr

        2 Python庫(kù)的安裝

        # PIL用于打開(kāi)圖片文件

        pip/pip3 install pillow

        # pytesseract模塊用于從圖片中解析數(shù)據(jù)

        pip/pip3 install pytesseract

        本次案例我們使用圖片識(shí)別引擎識(shí)別驗(yàn)證碼登陸古詩(shī)文網(wǎng)

      Picture(4)

        通過(guò)分析我們發(fā)現(xiàn)驗(yàn)證碼點(diǎn)擊刷新的鏈接是:

      Picture(5)

        所以我們請(qǐng)求10次本鏈接獲取10張圖片,進(jìn)行圖片識(shí)別

        import time

        from PIL import Image

        import pytesseract

        import requests

        headers = {

        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"

        }

        image_url = 'https://so.gushiwen.org/RandCode.ashx'

        # 下載驗(yàn)證碼圖片

        session = requests.Session() # 使用session是為了保證驗(yàn)證碼的請(qǐng)求和登陸請(qǐng)求信息一致

        for i in range(10):

        r = session.get(image_url, headers=headers)

        with open('images/code'+str(i)+'.jpg', 'wb') as fp:

        fp.write(r.content)

        time.sleep(10)

        print('下載完成第'+str(i)+'張!')

        # 依次識(shí)別并保存到文件中

        # 進(jìn)行二值處理

        def erzhihua(image, threshold):

        ''':type image:Image.Image'''

        image = image.convert('L')

        table = []

        for i in range(256):

        if i < threshold:

        table.append(0)

        else:

        table.append(1)

        return image.point(table, '1')

        # 對(duì)剛才保存的10張圖片進(jìn)行識(shí)別

        for i in range(10):

        im = Image.open('images/code' + str(i) + '.jpg')

        im = erzhihua(im, 127)

        im.show()

        result = pytesseract.image_to_string(im, lang='eng')

        print(result)

        但是很遺憾10次或者更多次數(shù)才能打碼成功一次。

        打碼平臺(tái)

        此時(shí)我們就要尋求專業(yè)的打碼平臺(tái),申請(qǐng)第三方的平臺(tái),宋宋試了一下阿里提供的各種免費(fèi)的打碼平臺(tái)。鏈接:https://market.aliyun.com/products/?keywords=圖片識(shí)別驗(yàn)證碼,但是識(shí)別效果不是很佳(哈哈因?yàn)槭敲赓M(fèi)的緣故吧!只有標(biāo)記優(yōu)品的那個(gè)還不錯(cuò)其他的也可以自行試一試)。

      Picture(6)

        為了測(cè)試它的識(shí)別效果,我們嘗試申請(qǐng)成交次數(shù)最多的那個(gè),查看官方API說(shuō)明如下:

      Picture(7)

        因此我們使用驗(yàn)證碼打碼平臺(tái)獲取驗(yàn)證碼并登錄

        實(shí)現(xiàn)思路:

        使用requests.session獲取圖片并進(jìn)行本地保存

        使用打碼平臺(tái)識(shí)別圖片

        獲取登錄鏈接,登陸鏈接是一個(gè)post請(qǐng)求,并攜帶了你的表單中填入的用戶名和密碼

        登陸獲取cookies, 才能去訪問(wèn)用戶的個(gè)人頁(yè)

        import json

        from PIL import Image

        import pytesseract

        import requests

        import urllib.request

        import base64

        import ssl

        ssl._create_default_https_context = ssl._create_unverified_context

        # 1. 使用requests.session獲取圖片并進(jìn)行本地保存

        headers = {

        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"

        , 'Host': 'www.xqb5200.com'

        , 'Referer': 'https://www.xqb5200.com/login.php'

        }

        session = requests.Session() # 使用session是為了保證驗(yàn)證碼的請(qǐng)求和登陸請(qǐng)求信息一致

        code_image_url = "https://www.xqb5200.com/checkcode.php"

        r = session.get(code_image_url, headers=headers)

        with open('code.jpg', 'wb') as fp:

        fp.write(r.content)

        # 2. 使用打碼平臺(tái)識(shí)別圖片

        # 修改API說(shuō)明修改接口地址

        url = 'https://imgurlocr.market.alicloudapi.com/urlimages'

        method = 'POST'

        appcode = '你的APPCODE'

        querys = ''

        bodys = {}

        f = open(r'code.jpg', 'rb')

        contents = base64.b64encode(f.read())

        f.close()

        bodys['image'] = bytes("data:image/jpg;base64,", encoding="utf8")+contents

        post_data = urllib.parse.urlencode(bodys).encode(encoding='UTF8')

        request = urllib.request.Request(url, post_data)

        # 根據(jù)API的要求,定義相對(duì)應(yīng)的Content-Type

        request.add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8')

        request.add_header('Authorization', 'APPCODE ' + appcode)

        ctx = ssl.create_default_context()

        ctx.check_hostname = False

        ctx.verify_mode = ssl.CERT_NONE

        response = urllib.request.urlopen(request, context=ctx)

        content = response.read()

        if (content):

        code = json.loads(content.decode('utf-8'))

        print(code)

        print(code['result']['words'])

        # 3. 獲取登錄鏈接,登陸鏈接是一個(gè)post請(qǐng)求,并攜帶了你的表單中填入的用戶名和密碼

        login_url = "https://www.xqb5200.com/login.php?do=submit"

        # 用戶名和密碼大家可以注冊(cè)一個(gè)新的用戶

        data = {

        "username": "你的用戶名",

        "password": "你的秘密",

        "checkcode": code,

        "action": "login",

        "submit": "%26%23160%3B%B5%C7%26%23160%3B%26%23160%3B%C2%BC%26%23160%3B"

        }

        # 4. 登陸獲取cookies, 才能去訪問(wèn)用戶的個(gè)人頁(yè)

        response = session.post(url=login_url, headers=headers, data=data)

        response.encoding = 'utf-8'

        cookies = response.cookies

        # 查看登陸是否成功了

        with open('logsucess.html', 'wb') as fp:

        response.encoding = response.apparent_encoding

        fp.write(response.content)

        這樣我們還是可以識(shí)別這個(gè)驗(yàn)證碼的,如圖

      Picture(8)

        最后保存到本地的文件,顯示登陸成功

      Picture(9)

        還有滑動(dòng)驗(yàn)證碼和點(diǎn)觸驗(yàn)證碼的使用以及selenium+驗(yàn)證碼登陸,期待下篇文章給大家分享...

      tags:
      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
      請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
      免費(fèi)領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      Visual Studio Online和GitHub有什么區(qū)別?

      1.定位不同Visual Studio Online,現(xiàn)更名為Visual Studio Codespaces,是微軟提供的一款在線開(kāi)發(fā)環(huán)境,允許開(kāi)發(fā)者在云端進(jìn)行編程和調(diào)試工作。而...詳情>>

      2023-10-15 00:21:42
      什么是域控制器?

      一、域控制器的定義域控制器是指在Windows Server操作系統(tǒng)中部署Active Directory服務(wù)的服務(wù)器。Active Directory是微軟公司開(kāi)發(fā)的目錄服務(wù),用...詳情>>

      2023-10-15 00:10:28
      深度學(xué)習(xí)模型權(quán)重h5、weights、ckpt、pth有什么區(qū)別?

      1.來(lái)源框架不同h5格式通常用于Keras和TensorFlow框架,weights用于Darknet框架,ckpt是TensorFlow框架的一種格式,而pth則主要用于PyTorch框架...詳情>>

      2023-10-15 00:05:17
      大數(shù)據(jù)測(cè)試工程師需要具備哪些技能?

      一、理解大數(shù)據(jù)概念大數(shù)據(jù)測(cè)試工程師需要理解大數(shù)據(jù)的基本概念和原理,如分布式存儲(chǔ)、MapReduce、實(shí)時(shí)計(jì)算等。他們還需要了解如何處理大規(guī)模的...詳情>>

      2023-10-14 23:43:03
      為什么SpringBoot的 jar 可以直接運(yùn)行?

      一、JAR文件的結(jié)構(gòu)與執(zhí)行方式Spring Boot的JAR包是Java Archive的縮寫,它是一種壓縮文件格式,可以將Java項(xiàng)目的類文件、資源文件以及依賴庫(kù)等...詳情>>

      2023-10-14 23:01:49
      快速通道