<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          字符型驗(yàn)證碼反爬蟲的原理和破解方法(附有字符驗(yàn)證碼制作代碼~)

          共 2783字,需瀏覽 6分鐘

           ·

          2021-08-01 17:48

          點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書

          萬戰(zhàn)自稱不提刃,生來雙眼篾群容。

          大家好,我是志斌~


          我們寫的爬蟲它實(shí)際是一種讓計(jì)算機(jī)自動(dòng)運(yùn)行的程序,它并不具備主觀的意識(shí),無法根據(jù)網(wǎng)站驗(yàn)證碼的要求來執(zhí)行相關(guān)操作,從而被限制爬取。


          所以,志斌今天來跟大家分享一下如何解決驗(yàn)證碼反爬蟲中的字符驗(yàn)證碼反爬蟲。


          01

          原理


          字符驗(yàn)證碼的反爬蟲原理很簡單,它利用數(shù)字、字母、漢字和標(biāo)點(diǎn)符號(hào)等字符做成一張圖片,用人類和計(jì)算機(jī)對這張圖片視覺上的差異作為區(qū)分用戶身份的依據(jù)。


          隨著當(dāng)前社會(huì)識(shí)別技術(shù)的發(fā)展,字符驗(yàn)證碼也也在不斷的改進(jìn),它通過添加干擾線、添加噪點(diǎn)以及增加字符的黏連程度和旋轉(zhuǎn)角度來增加機(jī)器識(shí)別的難度。


          02

          破解


          志斌以下面這張驗(yàn)證碼為例給大家講一下如何用用圖像識(shí)別的方式破解字符驗(yàn)證碼。它



          它有在線和離線兩種方式,我們下面來分別進(jìn)行介紹。


          01

           離線破解


          我們離線破解驗(yàn)證碼主要是使用的PIL庫和Pytesseract庫,在使用Pytesseract庫時(shí),需要先安裝Tesseract-OCR。


          驗(yàn)證碼識(shí)別一共分為這四步:

          1. 灰度化

          2. 二值化

          3. 識(shí)別


          首先使用PIL庫將彩色圖像轉(zhuǎn)化成灰色的圖像,代碼如下:

          from PIL import Image
          im= Image.open('5.jpg')
          imgry = im.convert('L')
          imgry.save('gray-'+'5.jpg')


          灰度化圖像:

          緊跟著二值化處理,讓字符顏色跟背景顏色反差更為明顯,代碼如下:

          threshold = 200
          Table = []
          for j in range(256):
          if j < threshold:
          Table.append(0)
          else:
          Table.append(1)
          out = imgry.point(Table,'1')
          out.save('123'+'5.jpg')

          二值化圖像:

          嘗試識(shí)別一下,代碼如下:

          import pytesseract
          pytesseract.image_to_string(out)



          02

           在線識(shí)別


          其實(shí)字符驗(yàn)證碼就是一張圖片,我們可以借助百度AI來進(jìn)行在線識(shí)別,之前的這篇文章已經(jīng)介紹很詳細(xì),有興趣的讀者可以讀一下這篇文章20行代碼教你如何批量提取圖片中文字,這里就不過多介紹了,直接展示代碼:

          from aip import AipOcr
          APP_ID = '你的APP_ID'
          API_KEY = '你的API_KEY'
          SECRET_KEY = '你的SECRET_KEY'
          client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
          with open('5.jpg','rb') as f:
          a = f.read()
          client.basicGeneral(a)


          03

          制作驗(yàn)證碼


          在來跟大家分享一下如何用Python制作一款字符驗(yàn)證碼,這樣可以使得我們更好的學(xué)習(xí)它,代碼如下:

          from PIL import Image,ImageDraw,ImageFont
          import random
          def getRandomColor():
          r = random.randint(0, 255)
          g = random.randint(0, 255)
          b = random.randint(0, 255)
          return (r,g,b)
          def getRandomStr():
          num_random = str(random.randint(1,9))
          random_upper_alpha = chr(random.randint(65,90))
          random_char = random.choice([num_random,random_upper_alpha])
          return random_char
          image = Image.new('RGB',(120,40),(255,255,255))
          draw = ImageDraw.Draw(image)
          font = ImageFont.truetype(r'K:\msyh.ttc',size=24)
          for i in range(4):
          draw.text((10+i*30,10),getRandomStr(),getRandomColor(),font=font)
          width = 120
          height = 40
          for i in range(5):
          x1 = random.randint(0,width)
          x2 = random.randint(0,width)
          y1 = random.randint(0,height)
          y2 = random.randint(0,height)
          draw.line((x1,x2,y1,y2),fill=getRandomColor())
          for i in range(20):
          draw.point([random.randint(0,width),random.randint(0,height)],fill=getRandomColor())
          x = random.randint(0,width)
          y = random.randint(0,height)
          draw.arc((x,y,x+5,y+5),0,90,fill=getRandomColor())
          image.save('5.jpg')


          04

          小結(jié)


          1. 本文詳細(xì)介紹了字符驗(yàn)證碼反爬蟲的原理和破解方法,并教大家如何做一款自己的字符驗(yàn)證碼。

          2. 字符型驗(yàn)證碼是一種比較常規(guī)的驗(yàn)證碼反爬蟲,破解方法較為簡單,喜歡爬蟲的讀者可以一定要學(xué)會(huì)喲~

          3. 本文僅供學(xué)習(xí)參考,不做它用。

          ------------------- End -------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請?jiān)诤笈_(tái)回復(fù)【入群

          萬水千山總是情,點(diǎn)個(gè)【在看】行不行

          /今日留言主題/

          隨便說一兩句吧~~

          瀏覽 67
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月天激情性爱 | www.99超碰 | 大香蕉伊人18禁止出售借阅 | 亚洲天堂网在线视频观看 | 欧美日韩黄色大片 |