爬蟲-處理驗證碼

前言

這兩天在看相關于模擬登錄的案例壹哺,不可避免的遇到了一些驗證碼相關的問題畴嘶,在此之前一直使用的是將驗證碼下載到本地溶其,然后人工肉眼識別的方式。但是效果可想而知策橘,精確度倒是還可以炸渡,然而卻變得不是很智能了。于是今天來學習一下如何自動識別驗證碼丽已。

環(huán)境

我的實驗環(huán)境為:

  • Python3.6
  • Pycharm2016.2 Professional
  • Tesseract-OCR-3.0
  • Windows 10 64位

在開始之前確保安裝了tesseract引擎蚌堵,然后是pytesseract這個第三方庫。

如果沒有安裝其實也是可以使用的沛婴,那就是借助Python調用系統(tǒng)命令的方式來實現(xiàn)將驗證碼圖片中的內容讀入到文本文件吼畏,在通過代碼讀取文本文件得到驗證碼內容。 但是pytesseract使得這樣的一個過程更加簡便嘁灯,所以沒有安裝的話還是建議安裝一下泻蚊。

pip install pytesseract

讀取圖片的時候需要PIL庫的支持,沒有安裝的話還是建議先安裝一下丑婿,否則程序無法進行下去的性雄。

實施

簡易示例

import pytesseract
from PIL import Image

image = Image.open(r'checkcode.gif', mode='r')
vcode = pytesseract.image_to_string(image)
print(vcode)

結果為:


圖片驗證碼識別

之所以不在PyCharm中運行, 就是因為會出現(xiàn)一些讓人不明所以的錯誤信息羹奉。比如什么

  • FileNotFoundError
  • Permission Denyed
  • .TesseractError: (1, 'Error opening data file \Software\tesseract\Tesseract-OCR\tessdata/eng.traineddata')

我也查了相關的資料秒旋,發(fā)現(xiàn)確實沒有什么好點的解決辦法,或許可以通過修改pytesseract.py的源碼來解決吧诀拭, 誰知道呢迁筛?

實戰(zhàn)校園圖書館登錄

# coding: utf8

# @Author: 郭 璞
# @File: DLUTLibraryLogin.py                                                                 
# @Time: 2017/4/7                                   
# @Contact: 1064319632@qq.com
# @blog: http://blog.csdn.net/marksinoberg
# @Description: 大連理工大學圖書館模擬登陸,添加了驗證碼識別腳本

import requests
import BeautifulSoup
import os, sys
import pytesseract
from PIL import Image


loginurl = 'http://opac.lib.dlut.edu.cn/reader/redr_verify.php'
captchaurl = 'http://opac.lib.dlut.edu.cn/reader/captcha.php'

headers = {
    'Referer': 'http://opac.lib.dlut.edu.cn/reader/login.php',
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36",
}

session = requests.Session()
##### 獲取到驗證碼并保存
checkcodecontent = session.get(captchaurl, headers=headers)
with open('checkcode.jpg', 'wb') as f:
    f.write(checkcodecontent.content)
    f.close()
print('驗證碼已寫入到本地!', '下面開始調用tesseract-OCR引擎識別驗證碼炫加!')

img = Image.open('checkcode.gif', mode='r')
result = pytesseract.image_to_string(image=img)
checkcode = result
print('驗證碼為:', checkcode)

# os.startfile('checkcode.jpg')
# checkcode = input('請輸入驗證碼:')
##### 準備登陸圖書館系統(tǒng)
payload = {
    'number':'學號',
    'passwd':'密碼',
    'captcha': checkcode,
    'select':'cert_no'
}

response = session.post(loginurl, headers=headers, data=payload)
print('服務器端返回碼: ', response.status_code)
soup = BeautifulSoup(response.text, 'html.parser')
## 打印當前用戶
username = soup.find('font', {'color': 'blue'})
print(username.get_text())
## 打印積分信息
jifen = soup.find_all('span', {'class': 'bigger-170'})[3]
jifen = str(jifen.get_text())
print('當前登錄用戶總積分:', jifen)


效果演示

大連理工大學圖書館系統(tǒng)

恩瑰煎,用戶名那點確實出現(xiàn)了亂碼,但是從積分那塊我們也可以發(fā)現(xiàn)確實是登錄成功了俗孝。相比于第一個版本酒甸,使用了pytesseract來處理驗證碼問題,還真的是比較方便的赋铝,最起碼不用再手動輸入了插勤,這也算是一個進步吧。

最后,需要說明的是在Pycharm中不好用农尖,還非得到CMD中去運行析恋,真的是很無語。

總結

最后又發(fā)現(xiàn)一個問題那就是Python36對于Pillow4.1.0不能兼容盛卡,安裝上去之后會出現(xiàn)各種各樣的問題助隧,比如:ImportError: DLL load failed: from . import _imaging as core

解決辦法就是安裝Pillow4.0.0,反正我是這么解決的了滑沧。

對于驗證碼問題并村,使用tesseract基本上已經滿足需求了。但是很多時候還是不能正確的獲取到真實的驗證碼內容滓技。

而現(xiàn)在網(wǎng)上也有很多專門的服務哩牍,通過接口的形式在線處理驗證碼問題,精準度還是很不錯的令漂,有興趣的話可以嘗試一下膝昆。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叠必,隨后出現(xiàn)的幾起案子荚孵,更是在濱河造成了極大的恐慌,老刑警劉巖挠唆,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件处窥,死亡現(xiàn)場離奇詭異嘱吗,居然都是意外死亡玄组,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門谒麦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俄讹,“玉大人,你說我怎么就攤上這事绕德』继牛” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵耻蛇,是天一觀的道長踪蹬。 經常有香客問我,道長臣咖,這世上最難降的妖魔是什么跃捣? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮夺蛇,結果婚禮上疚漆,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好娶聘,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布闻镶。 她就那樣靜靜地躺著,像睡著了一般丸升。 火紅的嫁衣襯著肌膚如雪铆农。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天狡耻,我揣著相機與錄音顿涣,去河邊找鬼。 笑死酝豪,一個胖子當著我的面吹牛涛碑,可吹牛的內容都是我干的。 我是一名探鬼主播孵淘,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蒲障,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瘫证?” 一聲冷哼從身側響起揉阎,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎背捌,沒想到半個月后毙籽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡毡庆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年坑赡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片么抗。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡毅否,死狀恐怖,靈堂內的尸體忽然破棺而出蝇刀,到底是詐尸還是另有隱情螟加,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布吞琐,位于F島的核電站捆探,受9級特大地震影響,放射性物質發(fā)生泄漏站粟。R本人自食惡果不足惜黍图,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卒蘸。 院中可真熱鬧雌隅,春花似錦翻默、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至检盼,卻和暖如春肯污,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吨枉。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工蹦渣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人貌亭。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓柬唯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親圃庭。 傳聞我的和親對象是個殘疾皇子锄奢,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容