爬蟲 之 驗證碼(一)

驗證碼的是反爬蟲策略之一慰丛,要如何解決驗證碼問題擎析?

簡單的驗證碼可以通過二值化的辦法

我們以?http://my.cnki.net/elibregister/commonRegister.aspx 為例

1-1

首先需要配置環(huán)境览妖,pip install pillow轧拄,pip install?pytesseract

安裝Tesseract-OCR? ? 地址:https://digi.bib.uni-mannheim.de/tesseract/ 在這里找到對應(yīng)版本安裝,將安裝好的Tesseract-OCR配置到環(huán)境變量中去讽膏,路徑也許會是?C:\Program Files (x86)\Tesseract-OCR\tessdata

1-2

準(zhǔn)備好了之后就可以開始解析驗證碼了

首先用selenium打開網(wǎng)頁檩电,并進行一個快照保存當(dāng)前頁面的png

browser = webdriver.Chrome()

url ='http://my.cnki.net/elibregister/commonRegister.aspx'

browser.get(url)

browser.save_screenshot('./images/zhiwang.png')

找到圖片驗證碼,并獲取他的四個點的坐標(biāo)府树,將驗證碼截取保存

img = browser.find_element_by_id('checkcode')

left? = img.location['x']#驗證碼圖片左上角橫坐標(biāo)

top? ? = img.location['y']#驗證碼圖片左上角縱坐標(biāo)

right? = left + img.size['width']#驗證碼圖片右下角橫坐標(biāo)

bottom = top + img.size['height']#驗證碼圖片右下角縱坐標(biāo)

im=Image.open('./images/zhiwang.png')

im_crop=im.crop((left,top,right,bottom))#這個im_crop就是從整個頁面截圖中再截出來的驗證碼的圖片

im_crop.save('./images/zrecaptchar.png')

打開驗證碼的圖片并進行灰度處理

img =Image.open('./images/zrecaptchar.png')

img.show()

#可以看出俐末,驗證碼文本一般都是黑色的,背景則會更加明亮奄侠,所以我們可以通過檢查像素是否為黑色將文本分離出來卓箫,該處理過程又被稱為閾值化。通過 Pillow 可以很容易地實現(xiàn)該處理過程垄潮。

gray = img.convert('L')#灰度化烹卒,圖片轉(zhuǎn)化成灰度圖

gray.show()

最后將圖片處理成黑白色,即二值化

#二值化,指定而二值化的閾值魂挂,默認(rèn)閾值127

threshold =135

table = []

for i in range(256):

????if i < threshold:

????????table.append(0)

????else:

????????table.append(1)

bw = gray.point(table,'1')

bw.show()

最后圖片識別

strcode = pytesseract.image_to_string(bw)

將處理好的驗證碼填入驗證碼輸入框中即可甫题,不過這種方式的處理出錯率較高,驗證的時候一定要記得多試幾次

最后附上完整代碼

from selenium import webdriver

import pytesseract

from PIL import Image

#Chrome瀏覽器

browser = webdriver.Chrome()

url ='http://my.cnki.net/elibregister/commonRegister.aspx'

browser.get(url)

checkCode = browser.find_element_by_id('txtOldCheckCode')#驗證碼輸入框

btnReg = browser.find_element_by_id('ButtonRegister')#登陸按鍵

#快照

browser.save_screenshot('./images/zhiwang.png')

#驗證碼圖片

img = browser.find_element_by_id('checkcode')

left? = img.location['x']#驗證碼圖片左上角橫坐標(biāo)

top? ? = img.location['y']#驗證碼圖片左上角縱坐標(biāo)

right? = left + img.size['width']#驗證碼圖片右下角橫坐標(biāo)

bottom = top + img.size['height']#驗證碼圖片右下角縱坐標(biāo)

im=Image.open('./images/zhiwang.png')

im_crop=im.crop((left,top,right,bottom))#這個im_crop就是從整個頁面截圖中再截出來的驗證碼的圖片

im_crop.save('./images/zrecaptchar.png')

img =Image.open('./images/zrecaptchar.png')

img.show()

#可以看出涂召,驗證碼文本一般都是黑色的坠非,背景則會更加明亮,所以我們可以通過檢查像素是否為黑色將文本分離出來果正,該處理過程又被稱為閾值化炎码。通過 Pillow 可以很容易地實現(xiàn)該處理過程。

gray = img.convert('L')#灰度化秋泳,圖片轉(zhuǎn)化成灰度圖

gray.show()

#二值化,指定而二值化的閾值潦闲,默認(rèn)閾值127

threshold =135

table = []

for i in range(256):

????if i < threshold:

????????table.append(0)

????else:

????????table.append(1)

bw = gray.point(table,'1')

bw.show()

strcode = pytesseract.image_to_string(bw)

checkCode.send_keys(strcode)

#模擬點擊按鈕

btnReg.click()


1-3
1-4


1-5

圓滿結(jié)束,如果成功率不高的話迫皱,可以適當(dāng)調(diào)整二值化閾值歉闰,不過總體成功率有待改善。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卓起,一起剝皮案震驚了整個濱河市和敬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戏阅,老刑警劉巖昼弟,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奕筐,居然都是意外死亡舱痘,警方通過查閱死者的電腦和手機变骡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芭逝,“玉大人塌碌,你說我怎么就攤上這事÷脸埽” “怎么了誊爹?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵蹬刷,是天一觀的道長瓢捉。 經(jīng)常有香客問我,道長办成,這世上最難降的妖魔是什么泡态? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮迂卢,結(jié)果婚禮上某弦,老公的妹妹穿的比我還像新娘。我一直安慰自己而克,他們只是感情好靶壮,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著员萍,像睡著了一般腾降。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碎绎,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天螃壤,我揣著相機與錄音,去河邊找鬼筋帖。 笑死奸晴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的日麸。 我是一名探鬼主播寄啼,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼代箭!你這毒婦竟也來了墩划?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤梢卸,失蹤者是張志新(化名)和其女友劉穎走诞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛤高,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡蚣旱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年碑幅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塞绿。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡沟涨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出异吻,到底是詐尸還是另有隱情裹赴,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布诀浪,位于F島的核電站棋返,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏雷猪。R本人自食惡果不足惜睛竣,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望求摇。 院中可真熱鬧射沟,春花似錦、人聲如沸与境。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摔刁。三九已至挥转,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間簸搞,已是汗流浹背扁位。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趁俊,地道東北人域仇。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像寺擂,于是被迫代替她去往敵國和親暇务。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355