Python爬蟲入門教程 55-100 python爬蟲高級技術之驗證碼篇

来源:https://www.cnblogs.com/happymeng/archive/2019/04/02/10640331.html
-Advertisement-
Play Games

驗證碼探究 如果你是一個數據挖掘愛好者,那麼驗證碼是你避免不過去的一個天坑,和各種驗證碼鬥爭,必然是你成長的一條道路,接下來的幾篇文章,我會儘量的找到各種驗證碼,並且去嘗試解決掉它,中間有些技術甚至我都沒有見過,來吧,一起Coding吧 數字+字母的驗證碼 我隨便在百度圖片搜索了一個驗證碼,如下 今 ...


驗證碼探究

如果你是一個數據挖掘愛好者,那麼驗證碼是你避免不過去的一個天坑,和各種驗證碼鬥爭,必然是你成長的一條道路,接下來的幾篇文章,我會儘量的找到各種驗證碼,並且去嘗試解決掉它,中間有些技術甚至我都沒有見過,來吧,一起Coding吧

數字+字母的驗證碼

我隨便在百度圖片搜索了一個驗證碼,如下
驗證碼
今天要做的是驗證碼識別中最簡單的一種辦法,採用pytesseract解決,它屬於Python當中比較簡單的OCR識別庫

庫的安裝

使用pytesseract之前,你需要通過pip 安裝一下對應的模塊 ,需要兩個

pytesseract庫還有圖像處理的pillow庫了

pip install pytesseract
pip install pillow

如果你安裝了這兩個庫之後,編寫一個識別代碼,一般情況下會報下麵這個錯誤

pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path

這是由於你還缺少一部分內容

安裝一個Tesseract-OCR軟體。這個軟體是由Google維護的開源的OCR軟體。

下載地址 > https://github.com/tesseract-ocr/tesseract/wiki

中文包的下載地址 > https://github.com/tesseract-ocr/tessdata

選擇你需要的版本進行下載即可

pillow庫的基本操作

命令 釋義
open() 打開一個圖片
from PIL import Image
im = Image.open("1.png")
im.show()
save() 保存文件
convert() convert() 是圖像實例對象的一個方法,接受一個 mode 參數,用以指定一種色彩模式,mode 的取值可以是如下幾種:
· 1 (1-bit pixels, black and white, stored with one pixel per byte)
· L (8-bit pixels, black and white)
· P (8-bit pixels, mapped to any other mode using a colour palette)
· RGB (3x8-bit pixels, true colour)
· RGBA (4x8-bit pixels, true colour with transparency mask)
· CMYK (4x8-bit pixels, colour separation)
· YCbCr (3x8-bit pixels, colour video format)
· I (32-bit signed integer pixels)
· F (32-bit floating point pixels)

Filter

from PIL import Image, ImageFilter 
im = Image.open(‘1.png’) 
# 高斯模糊 
im.filter(ImageFilter.GaussianBlur) 
# 普通模糊 
im.filter(ImageFilter.BLUR) 
# 邊緣增強 
im.filter(ImageFilter.EDGE_ENHANCE) 
# 找到邊緣 
im.filter(ImageFilter.FIND_EDGES) 
# 浮雕 
im.filter(ImageFilter.EMBOSS) 
# 輪廓 
im.filter(ImageFilter.CONTOUR) 
# 銳化 
im.filter(ImageFilter.SHARPEN) 
# 平滑 
im.filter(ImageFilter.SMOOTH) 
# 細節 
im.filter(ImageFilter.DETAIL)

Format

format屬性定義了圖像的格式,如果圖像不是從文件打開的,那麼該屬性值為None;
size屬性是一個tuple,表示圖像的寬和高(單位為像素);
mode屬性為表示圖像的模式,常用的模式為:L為灰度圖,RGB為真彩色,CMYK為pre-press圖像。如果文件不能打開,則拋出IOError異常。

這個地方可以參照一篇博客,寫的不錯 > https://www.cnblogs.com/mapu/p/8341108.html

驗證碼識別

註意安裝完畢,如果還是報錯,請找到模塊 pytesseract.py 這個文件,對這個文件進行編輯

一般這個文件在 C:\Program Files\Python36\Lib\site-packages\pytesseract\pytesseract.py 位置

文件中 tesseract_cmd = 'tesseract' 改為自己的地址
例如: tesseract_cmd = 'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe' 

如果報下麵的BUG,請註意

Error opening data file \Program Files (x86)\Tesseract-OCR\tessdata/chi_sim.traineddata Please make sure the TESSDATA_PREFIX environment variable

解決辦法也比較容易,按照它的提示,表示缺失了 TESSDATA_PREFIX 這個環境變數。你只需要在系統環境變數中添加一條即可

將 TESSDATA_PREFIX=C:\Program Files (x86)\Tesseract-OCR 添加環境變數

重啟IDE或者重新CMD,然後繼續運行代碼,這個地方註意需要用管理員運行你的py腳本

步驟分為

  1. 打開圖片 Image.open()
  2. pytesseract識別圖片
import pytesseract
from PIL import Image

def main():
    image = Image.open("1.jpg")
 
    text = pytesseract.image_to_string(image,lang="chi_sim")
    print(text)

if __name__ == '__main__':
    main()

測試英文,數字什麼的基本沒有問題,中文簡直慘不忍睹。空白比較大的可以識別出來。唉~不好用
當然剛纔那個7364 十分輕鬆的就識別出來了。

帶干擾的驗證碼識別

接下來識別如下的驗證碼,我們首先依舊先嘗試一下。運行代碼發現沒有任何顯示。接下來需要對這個圖片進行處理
在這裡插入圖片描述
基本原理都是完全一樣的

  1. 彩色轉灰度
  2. 灰度轉二值
  3. 二值圖像識別

彩色轉灰度

im = im.convert('L')  

灰度轉二值,解決方案比較成套路,採用閾值分割法,threshold為分割點

def initTable(threshold=140):
    table = []
    for i in range(256):
        if i < threshold:
            table.append(0)
        else:
            table.append(1)
    return table

調用

binaryImage = im.point(initTable(), '1')
binaryImage.show()

調整之後
python驗證碼
我們還需要對干擾線進行處理。在往下研究去,是圖片深入處理的任務,對付小網站的簡單驗證碼,這個辦法足夠了,本篇博文OVER,下一篇我們繼續研究驗證碼。

參考鏈接

tesserocr GitHub:https://github.com/sirfz/tesserocr
tesserocr PyPI:https://pypi.python.org/pypi/tesserocr
pytesserocr GitHub:https://github.com/madmaze/pytesseract
pytesserocr PyPI:https://pypi.org/project/pytesseract/
tesseract下載地址:http://digi.bib.uni-mannheim.de/tesseract
tesseract GitHub:https://github.com/tesseract-ocr/tesseract
tesseract 語言包:https://github.com/tesseract-ocr/tessdata
tesseract文檔:https://github.com/tesseract-ocr/tesseract/wiki/Documentation

掃碼關註微信公眾賬號,領取2T學習資源


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • v-bind:title="message" ...
  • 背景 去年年底的時候,靜兒在團隊會議中提出了自己的對整個服務將來的規劃。靜兒心裡明白自己的架構設想是可實現的,但是遠超目前的架構。被質疑無法落地。於是靜兒將一些概念的東西全都拋去,直接針對具體的項目做領域拆分。項目也在一點點像靜兒原來規劃的演進。 靜兒認為這個不做管理的一個好處:「對技術的挑戰要大的 ...
  • 1 IGame游戲公司的故事 1.1 討論會 話說有一個叫IGame的游戲公司,正在開發一款ARPG游戲(動作&角色扮演類游戲,如魔獸世界、夢幻西游這一類的游戲)。一般這類游戲都有一個基本的功能,就是打怪(玩家攻擊怪物,藉此獲得經驗、虛擬貨幣和虛擬裝備),並且根據玩家角色所裝備的武器不同,攻擊效果也 ...
  • 定義: 保證一個類僅有一個實例,並提供一個全局訪問點 適用場景: 確保任何情況下這個對象只有一個實例 詳解: 1.私有構造器: 將本類的構造器私有化,其實這是單例的一個非常重要的步驟,沒有這個步驟,可以說你的就不是單例模式。這個步驟其實是防止外部函數在new的時候能構造出來新的對象,我們說單例要保證 ...
  • 又和大家見面了。首先,和大家說聲抱歉,之前的幾篇文章,可能條理清晰之類的做的不太好,每篇文章的篇幅也比較長,小編在收到讀者的建議之後, 也是認真的思考了一番。之前的想法是儘量把一個模塊介紹完,沒想到一個模塊寫著寫著就寫長了。在之後的文章里,需要認真分段,做到能簡潔就簡潔,能分塊就分塊,在利用大家碎片 ...
  • 官網:www.fhadmin.org 工作流模塊 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3.運行中流程:查看流程信息、當前任務節點、當前流程圖、作廢暫停流程、指派待辦人 4. ...
  • 記錄一下最近整理的spring boot項目 項目地址:https://gitee.com/xl0917/spring-boot 1.選擇Spring Initializr 一直點擊next,直到創建完成 2.創建spring boot子模塊,創建無任何模板的maven項目 3.項目結構 4.pom ...
  • 前言 去年年底,博主有購房的意願,本來是打算在青島市北購房,怎奈工作變動,意向轉移到了李滄,坐等了半年以後,最終選擇在紅島附近購置了期房。 也許一些知道青島紅島的小伙伴會問我,為什麼會跑到那鳥不拉屎的地方去買房子,目前只能是一個字:"賭、賭、賭",重要的事情說三遍。下麵來分析一下,我為什麼沒有在李滄 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...