自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python爬蟲遇到驗證碼的幾種處理方式,文章末尾有源碼

開發(fā) 后端
本篇文章介紹了爬蟲中驗證碼的處理方式, 并把這些功能封裝起來,供我們使用, 涉及到百度AIP的調(diào)用方式, 以及一個最新的開源庫muggle識別庫的使用。

最近事情其實挺多了,打了一下藍(lán)橋杯的比賽, 還在準(zhǔn)備著一些證書的考試, 關(guān)于爬蟲之類的博客都擱著了一段時間了, 關(guān)于我自己確實有點退步了, 實屬不該, 其實我自己也是在想, 大三了,到底我是要去考研,還是依然像這樣更新?lián)Q代的學(xué)技術(shù), 再或者, 繼續(xù)鉆爬蟲這路子, 雖然我也不知道這路走的順不順, 自己也有點抓不住光明, 這段時間,大概花了一個多月的晚上吧, 終于把Django 的大致過了一次, 剩下的就是對著官方文檔和一些實際項目操作了, 這些我也會打算開一個專欄,來專門記錄一下我學(xué)習(xí)Django 的一些心酸道路, 學(xué)習(xí)依舊是這樣, 你不學(xué)習(xí),就會失去, 很是莫名其妙, 真的很奇怪, 某人的獎學(xué)金是靠關(guān)系的, 某項目的獲獎?wù)邇H僅只是臨時換了一個名字,。。。

不管這些了,無所謂的東西, 這邊博客,將處理圖片驗證碼的2個比較優(yōu)秀的方式進(jìn)行了一次封裝, 分別是百度的aip 和 一個最近火起來的識別muggle-ocr

這里要主要提一下百度的aip,這里面的東西是真的多, 我還擴(kuò)展了一個識別色情圖片的函數(shù), 有興趣的可以玩一玩, 另外 學(xué)了爬蟲之后, 這些圖片真的是應(yīng)接不暇, 網(wǎng)站也是多的數(shù)不勝數(shù), 希望凈網(wǎng)行動加把勁, 剩下的就不比比了, 看實際操作吧。

本篇文章介紹了爬蟲中驗證碼的處理方式, 并把這些功能封裝起來,供我們使用, 涉及到百度AIP的調(diào)用方式, 以及一個最新的開源庫muggle識別庫的使用。

目錄:

  • 學(xué)會調(diào)用百度的aip接口:
  • 擴(kuò)展百度的色情識別接口:
  • 學(xué)會muggle_ocr 識別接口:

封裝源碼:

學(xué)會調(diào)用百度的aip接口:

  • 1. 首先需要注冊一個賬號:
  • https://login.bce.baidu.com/

注冊完成之后登入

2. 創(chuàng)建項目

在這些技術(shù)里面找到文字識別,然后點擊創(chuàng)建一下項目

 

Python爬蟲遇到驗證碼的幾種處理方式,文章末尾有源碼

創(chuàng)建完成之后:

 

Python爬蟲遇到驗證碼的幾種處理方式,文章末尾有源碼

圖片中 AppID , API key, Secret Key 這些待會是需要用的。

下一步可以查看官網(wǎng)文檔,或者直接使用我寫的代碼

3. 安裝一下依賴庫 pip install baidu-aip

這只是一個接口, 需要前面的一些設(shè)置。

 

  1. def return_ocr_by_baidu(self, test_image): 
  2.         ""
  3.         ps: 先在__init__  函數(shù)中完成你自己的baidu_aip 的一些參數(shù)設(shè)置 
  4.  
  5.         這次測試使用 高精度版本測試 
  6.                     如果速度很慢 可以換回一般版本 
  7.                     self.client.basicGeneral(image, options) 
  8.                     相關(guān)參考網(wǎng)址: 
  9.                     https://cloud.baidu.com/doc/OCR/s/3k3h7yeqa 
  10.         :param test_image: 待測試的文件名稱 
  11.         :return:  返回這個驗證碼的識別效果 如果錯誤  可以多次調(diào)用 
  12.         ""
  13.         image = self.return_image_content(test_image=self.return_path(test_image)) 
  14.  
  15.         # 調(diào)用通用文字識別(高精度版) 
  16.         # self.client.basicAccurate(image) 
  17.  
  18.         # 如果有可選參數(shù) 相關(guān)參數(shù)可以在上面的網(wǎng)址里面找到 
  19.         options = {} 
  20.         options["detect_direction"] = "true" 
  21.         options["probability"] = "true" 
  22.  
  23.         # 調(diào)用 
  24.         result = self.client.basicAccurate(image, options) 
  25.         result_s = result['words_result'][0]['words'
  26.         # 不打印關(guān)閉 
  27.         print(result_s) 
  28.         if result_s: 
  29.             return result_s.strip() 
  30.         else
  31.             raise Exception("The result is None , try it !"

擴(kuò)展百度的色情識別接口:

我們寫代碼肯定是要找點樂子的, 不可能這么枯燥無味吧?

色情識別接口在 內(nèi)容審核中, 找一下就可以了。

調(diào)用方式源碼:

 

  1. # -*- coding :  utf-8 -*- 
  2. # @Time      :  2020/10/22  17:30 
  3. # @author    :  沙漏在下雨 
  4. # @Software  :  PyCharm 
  5. # @CSDN      :  https://me.csdn.net/qq_45906219 
  6.  
  7. from aip import AipContentCensor 
  8. from ocr import MyOrc 
  9.  
  10.  
  11. class Auditing(MyOrc): 
  12.     ""
  13.     這是一個調(diào)用百度內(nèi)容審核的aip接口 
  14.     主要用來審核一些色情 反恐 惡心 之類的東西 
  15.     網(wǎng)址:  https://ai.baidu.com/ai-doc/ANTIPORN/tk3h6xgkn 
  16.     ""
  17.  
  18.     def __init__(self): 
  19.         # super().__init__() 
  20.         APP_ID = '填寫你的ID' 
  21.         API_KEY = '填寫你的KEY' 
  22.         SECRET_KEY = '填寫你的SECRET_KEY' 
  23.  
  24.         self.client = AipContentCensor(APP_ID, API_KEY, SECRET_KEY) 
  25.  
  26.     def return_path(self, test_image): 
  27.         return super().return_path(test_image) 
  28.  
  29.     def return_image_content(self, test_image): 
  30.         return super().return_image_content(test_image) 
  31.  
  32.     def return_Content_by_baidu_of_image(self, test_image, mode=0): 
  33.         ""
  34.         繼承ocr中的一些方法, 因為都是放一起的 少些一點代碼 
  35.         內(nèi)容審核: 關(guān)于圖片中是否存在一些非法不良信息 
  36.         內(nèi)容審核還可以實現(xiàn)文本審核 我覺得有點雞肋  就沒一起封裝進(jìn)去 
  37.         url: https://ai.baidu.com/ai-doc/ANTIPORN/Wk3h6xg56 
  38.         :param test_image: 待測試的圖片 可以本地文件 也可以網(wǎng)址 
  39.         :param mode:  默認(rèn) = 0 表示 識別的本地文件   mode = 1 表示識別的圖片網(wǎng)址連接 
  40.         :return: 返回識別結(jié)果 
  41.         ""
  42.         if mode == 0: 
  43.             filepath = self.return_image_content(self.return_path(test_image=test_image)) 
  44.         elif mode == 1: 
  45.             filepath = test_image 
  46.         else
  47.             raise Exception("The mode is 0 or 1 but your mode is ", mode) 
  48.         # 調(diào)用色情識別接口 
  49.         result = self.client.imageCensorUserDefined(filepath) 
  50.  
  51.         # """ 如果圖片是url調(diào)用如下 """ 
  52.         # result = self.client.imageCensorUserDefined('http://www.example.com/image.jpg'
  53.         print(result) 
  54.         return result 
  55.  
  56.  
  57. a = Auditing() 
  58. a.return_Content_by_baidu_of_image("test_image/2.jpg", mode=0) 

學(xué)會muggle_ocr 識別接口:

這個包是最近火起來的, 使用起來很簡單, 沒多少其他函數(shù)

  • 安裝 pip install muggle-ocr 這個下載有點慢 最好使用手機(jī)熱點 目前鏡像網(wǎng)站(清華/阿里) 還沒有更新到這個包 因為這個包是最新的一個ocr模型 12
  • 調(diào)用接口

 

  1. def return_ocr_by_muggle(self, test_image, mode=1): 
  2.        ""
  3.            調(diào)用這個函數(shù)使用 muggle_ocr 來進(jìn)行識別 
  4.            :param  test_image  待測試的文件名稱 最好絕對路徑 
  5.            :param  模型 mode = 0  即 ModelType.OCR 表示識別普通印刷文本 
  6.                  當(dāng) mode = 1 默認(rèn)  即 ModelType.Captcha 表示識別4-6位簡單英輸驗證碼 
  7.  
  8.            官方網(wǎng)站: https://pypi.org/project/muggle-ocr/ 
  9.            :return: 返回這個驗證碼的識別結(jié)果 如果錯誤 可以多次調(diào)用 
  10.        ""
  11.        # 確定識別物品 
  12.        if mode == 1: 
  13.            sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha) 
  14.        elif mode == 0: 
  15.            sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR) 
  16.        else
  17.            raise Exception("The mode is 0 or 1 , but your mode  == ", mode) 
  18.  
  19.        filepath = self.return_path(test_image=test_image) 
  20.  
  21.        with open(filepath, 'rb'as fr: 
  22.            captcha_bytes = fr.read() 
  23.            result = sdk.predict(image_bytes=captcha_bytes) 
  24.            # 不打印關(guān)閉 
  25.            print(result) 
  26.            return result.strip() 

封裝源碼:

 

  1. # -*- coding :  utf-8 -*- 
  2. # @Time      :  2020/10/22  14:12 
  3. # @author    :  沙漏在下雨 
  4. # @Software  :  PyCharm 
  5. # @CSDN      :  https://me.csdn.net/qq_45906219 
  6.  
  7. import muggle_ocr 
  8. import os 
  9. from aip import AipOcr 
  10.  
  11. ""
  12.     PS: 這個作用主要是作了一個封裝 把2個常用的圖片/驗證碼識別方式合在一起 怎么用 取決于自己 
  13.      
  14.     接口1: muggle_ocr  
  15.           pip install muggle-ocr 這個下載有點慢 最好使用手機(jī)熱點 
  16.           目前鏡像網(wǎng)站(清華/阿里)  還沒有更新到這個包 因為這個包是最新的一個ocr模型 
  17.            
  18.     接口2: baidu-aip 
  19.           pip install baidu-aip 
  20.           這個知道的人應(yīng)該很多很多, 但是我覺得還是muggle 這個新包猛的一比 
  21.           調(diào)用方式 可以參考官網(wǎng)文檔: https://cloud.baidu.com/doc/OCR/index.html 
  22.           或者使用我如下的方式  都是ok的 
  23.     :param image_path  待識別的圖片路徑  如果目錄很深 推薦使用絕對路徑 
  24.      
  25. ""
  26.  
  27.  
  28. class MyOrc: 
  29.     def __init__(self): 
  30.         # 設(shè)置一些必要信息 使用自己百度aip的內(nèi)容 
  31.         APP_ID = '你的ID' 
  32.         API_KEY = '你的KEY' 
  33.         SECRET_KEY = '你的SECRET_KEY' 
  34.  
  35.         self.client = AipOcr(APP_ID, API_KEY, SECRET_KEY) 
  36.  
  37.     def return_path(self, test_image): 
  38.  
  39.         """:return abs image_path""" 
  40.         # 確定路徑 
  41.         if os.path.isabs(test_image): 
  42.             filepath = test_image 
  43.         else
  44.             filepath = os.path.abspath(test_image) 
  45.         return filepath 
  46.  
  47.     def return_image_content(self, test_image): 
  48.         """:return the image content """ 
  49.         with open(test_image, 'rb'as fr: 
  50.             return fr.read() 
  51.  
  52.     def return_ocr_by_baidu(self, test_image): 
  53.         ""
  54.         ps: 先在__init__  函數(shù)中完成你自己的baidu_aip 的一些參數(shù)設(shè)置 
  55.  
  56.         這次測試使用 高精度版本測試 
  57.                     如果速度很慢 可以換回一般版本 
  58.                     self.client.basicGeneral(image, options) 
  59.                     相關(guān)參考網(wǎng)址: 
  60.                     https://cloud.baidu.com/doc/OCR/s/3k3h7yeqa 
  61.         :param test_image: 待測試的文件名稱 
  62.         :return:  返回這個驗證碼的識別效果 如果錯誤  可以多次調(diào)用 
  63.         ""
  64.         image = self.return_image_content(test_image=self.return_path(test_image)) 
  65.  
  66.         # 調(diào)用通用文字識別(高精度版) 
  67.         # self.client.basicAccurate(image) 
  68.  
  69.         # 如果有可選參數(shù) 相關(guān)參數(shù)可以在上面的網(wǎng)址里面找到 
  70.         options = {} 
  71.         options["detect_direction"] = "true" 
  72.         options["probability"] = "true" 
  73.  
  74.         # 調(diào)用 
  75.         result = self.client.basicAccurate(image, options) 
  76.         result_s = result['words_result'][0]['words'
  77.         # 不打印關(guān)閉 
  78.         print(result_s) 
  79.         if result_s: 
  80.             return result_s.strip() 
  81.         else
  82.             raise Exception("The result is None , try it !"
  83.  
  84.     def return_ocr_by_muggle(self, test_image, mode=1): 
  85.         ""
  86.             調(diào)用這個函數(shù)使用 muggle_ocr 來進(jìn)行識別 
  87.             :param  test_image  待測試的文件名稱 最好絕對路徑 
  88.             :param  模型 mode = 0  即 ModelType.OCR 表示識別普通印刷文本 
  89.                   當(dāng) mode = 1 默認(rèn)  即 ModelType.Captcha 表示識別4-6位簡單英輸驗證碼 
  90.  
  91.             官方網(wǎng)站: https://pypi.org/project/muggle-ocr/ 
  92.             :return: 返回這個驗證碼的識別結(jié)果 如果錯誤 可以多次調(diào)用 
  93.         ""
  94.         # 確定識別物品 
  95.         if mode == 1: 
  96.             sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha) 
  97.         elif mode == 0: 
  98.             sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR) 
  99.         else
  100.             raise Exception("The mode is 0 or 1 , but your mode  == ", mode) 
  101.  
  102.         filepath = self.return_path(test_image=test_image) 
  103.  
  104.         with open(filepath, 'rb'as fr: 
  105.             captcha_bytes = fr.read() 
  106.             result = sdk.predict(image_bytes=captcha_bytes) 
  107.             # 不打印關(guān)閉 
  108.             print(result) 
  109.             return result.strip() 
  110.  
  111.  
  112. # a = MyOrc() 
  113.  
  114. # a.return_ocr_by_baidu(test_image='test_image/digit_img_1.png'

 

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2021-08-02 12:29:15

Python爬蟲網(wǎng)站

2021-06-10 18:24:59

反爬蟲驗證碼爬蟲

2020-04-26 14:40:19

戴爾

2013-06-19 10:19:59

2015-01-21 16:07:57

Android源碼驗證碼倒計時

2021-01-19 10:29:34

短信驗證碼密碼

2022-02-11 07:10:15

驗證碼

2020-11-16 07:28:53

驗證碼

2022-12-06 08:18:59

2011-11-02 12:43:33

2011-11-02 16:46:41

2019-06-18 07:12:25

驗證碼漏洞加密

2025-01-27 12:19:51

2010-01-11 14:16:14

VB.NET生成驗證碼

2023-07-10 08:00:13

架構(gòu)Rest返回值

2009-08-11 14:05:28

JSP驗證碼

2009-02-09 14:17:36

2017-12-21 07:38:19

2015-03-23 17:58:04

驗證碼倒計時并行
點贊
收藏

51CTO技術(shù)棧公眾號