GitHub
python3网络爬虫开发实战第二版——8.1

环境问题

安装

1.参考:Tesserocr 的安装 | 静觅
在 Windows 下,首先需要下载 Tesseract,它为 Tesserocr 提供了支持…

2.官方GitHub

从simonflueckiger/tesserocr-windows_build/releases下载与您的 Windows 平台和 Python 安装相对应的轮文件,并通过以下方式安装它们:

pip install <package_name>.whl

目前最高支持python3.7

验证一下

1
ImportError: cannot import name ‘_imaging’ from ‘PIL’ (C:\Anaconda3\lib\site

重新安装 Pillow 包

pip uninstall Pillow
pip install Pillow

2

Traceback (most recent call last):File "H:/project/python/爬虫/08 验证码识别/8.1 OCR.py", line 4, in <module>print(tesserocr.image_to_text(image))File "tesserocr.pyx", line 2443, in tesserocr._tesserocr.image_to_text
RuntimeError: Failed to init API, possibly an invalid tessdata path: C:\Anaconda3\/tessdata/

参考:RuntimeError: Failed to init API, possibly an invalid tessdata path: C:\User_回忆不说话的博客-CSDN博客

把 tessdata 文件夹复制到 C:\Anaconda3下即可

基础

参考:Tesserocr 的安装 | 静觅

首先利用 Image 读取了图片文件,然后调用了 tesserocr 的 image_to_text () 方法,再将将其识别结果输出。

import tesserocr
from PIL import Image
image = Image.open('image.png')
print(tesserocr.image_to_text(image)) # 没识别出来就是输出空output:6869

还可以直接调用 file_to_text () 方法

import tesserocr
print(tesserocr.file_to_text('image.png'))

灰度化

去除干扰点

import tesserocr
from PIL import Image
image = Image.open('image2.png')
print(tesserocr.image_to_text(image))output:3 2e i)

先查看图片的类型

from PIL import Image
import numpy as np
image = Image.open('image2.png')
print(np.array(image).shape) # (38, 112, 4) 4通道,具有透明通道的彩色图片
print(image.mode) # RGBA  A是透明通道

image.convert(‘L’) 把RBGA转为更简单的L,即把图片转化为灰度图像

image = Image.open('image2.png')
image = image.convert('L')  # L 灰度 0-255 越小越黑;1 二值化
threshold = 100 # 阈值 一般大于100 小于200 太大太小都可能识别不成功
array = np.array(image)
array = np.where(array > threshold, 255, 0) # 灰度大于阈值设置为255(白色),小于设置为0(黑色)
image = Image.fromarray(array.astype('uint8'))
image.save('image2_done.png')
# image.show()
print(tesserocr.image_to_text(image)) #32ec

image2_done.png

识别实战

参考:python中retry的用法_70大盗-CSDN博客_python retry

retry()在这里的功能,是在其装饰的函数运行报错后重新运行该函数

stop_max_attempt_number:在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行,默认为5次wait_random_min:在两次调用方法停留时长,停留最短时间,默认为0,单位毫秒wait_random_max:在两次调用方法停留时长,停留最长时间,默认为1000毫秒retry_on_result:指定一个函数,如果指定的函数返回True,则重试,否则抛出异常退出retry_on_exception: 指定一个函数,如果此函数返回指定异常,则会重试,如果不是指定的异常则会退出
import time
import re
import tesserocr
from selenium import webdriver
from io import BytesIO
from PIL import Image
from retrying import retry
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
import numpy as npthreshold = 120  # 阈值def preprocess(image):'''处理图片:param image: 图片对象:return: 处理后的图片对象'''image = image.convert('L')array = np.array(image)array = np.where(array > threshold, 255, 0)image = Image.fromarray(array.astype('uint8'))# image.save('1.png')# image.show()return image@retry(stop_max_attempt_number=10, retry_on_result=lambda x: x is False)
def login():browser.get('https://captcha7.scrape.center/')browser.find_element_by_css_selector('.username input').send_keys('admin')  # 用户名browser.find_element_by_css_selector('.password  input').send_keys('admin')  # 密码captcha = browser.find_element_by_css_selector('#captcha')  # 验证码image = Image.open(BytesIO(captcha.screenshot_as_png))  # 先截取验证码图片,然后转化为图片对象image = preprocess(image)captcha = tesserocr.image_to_text(image)  # 识别验证码print('处理前:', captcha)captcha = re.sub('[^A-Za-z0-9]', '', captcha)  # 去除非字母和数字的字符print('处理后:', captcha)# 这里 '.captcha input'不行 不知道为啥?browser.find_element_by_css_selector('.captcha input[type="text"]').send_keys(captcha)  # 写入验证码browser.find_element_by_css_selector('.login').click()  # 点击登录try:WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//h2[contains(text(),"登录成功")]')))# WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//h2[contains(., "登录成功")]')))time.sleep(5)browser.close()print('登陆成功')print('---'*10)return Trueexcept TimeoutException:print('登陆失败')print('---'*10)return Falseif __name__ == '__main__':browser = webdriver.Chrome()login()
处理前: 40b6处理后: 40b6
登陆失败
------------------------------
处理前: “4 4F处理后: 44F
登陆失败
------------------------------
处理前: 3 5b Oo处理后: 35bOo
登陆失败
------------------------------
处理前: 47406处理后: 47406
登陆失败
------------------------------
处理前: OF Ob处理后: OFOb
登陆失败
------------------------------
处理前: “3dad处理后: 3dad
登陆失败
------------------------------
处理前: 2% 67处理后: 267
登陆失败
------------------------------
处理前: 42ad处理后: 42ad
登陆失败
------------------------------
处理前: © BASE处理后: BASE
登陆失败
------------------------------
处理前: 8947处理后: 8947
登陆成功
------------------------------进程已结束,退出代码为 0

【爬虫】学习:OCR识别图形验证码相关推荐

  1. python代码标识码_代码分享:使用Python和Tesseract来识别图形验证码

    原标题:代码分享:使用Python和Tesseract来识别图形验证码 *本文原创作者:ipenox,本文属FreeBuf原创奖励计划,未经许可禁止转载 各位在企业中做Web漏洞扫描或者渗透测试的朋友 ...

  2. 爬虫学习_selenium自动填写验证码

    爬虫学习_自动填写验证码 介绍一哈 项目 第一步 打开网站 第二步 获取验证码图片 第二步 获取验证码图片 第三步 识别验证码 结束 完整代码 介绍一哈 最近在跟着静觅大神.............. ...

  3. python—简单数据抓取四(利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站、利用百度云的ocr识别自如租房网价格图片获取到自如网的价格)

    学习目标: python学习二十四 -简单数据抓取四 学习内容: 1.利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站 2.利用百度云的ocr识别自如租房网的价格图片,获取到自如网的价格数据 1.利 ...

  4. Python模拟登录,Python识别图形验证码实现自动登陆

    前言 利用Python识别图形验证码,selenium模块实现自动登陆.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: re: numpy模块: pytess ...

  5. Python3 爬虫学习笔记 C12【验证码对抗系列 — 图形验证码】

    Python3 爬虫学习笔记第十二章 -- [验证码对抗系列 - 图形验证码] 文章目录 [12.1]关于普通图形验证码 [12.2]tesserocr 库识别验证码 [12.3]pytesserac ...

  6. 爬虫入门经典(十七) | 图形验证码识别

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

  7. python 识别图形验证码_python爬虫20 | 小帅b教你如何用python识别图片验证码

    当你在爬取某些网站的时候 对于你的一些频繁请求 对方会阻碍你 常见的方式就是使用验证码 验证码的主要功能 就是区分你是人还是鬼(机器人) 人 想法设法的搞一些手段来对付技术 而 技术又能对付人们的想法 ...

  8. Python3 爬虫学习笔记 C14【验证码对抗系列 — 点触验证码】

    Python3 爬虫学习笔记第十四章 -- [验证码对抗系列 - 点触验证码] 文章目录 [14.1]关于点触验证码 [14.2]点触验证码攻克思路 [14.3]模拟登录 12306 - 总体思路 [ ...

  9. Python3 爬虫学习笔记 C13【验证码对抗系列 — 滑动验证码】

    Python3 爬虫学习笔记第十三章 -- [验证码对抗系列 - 滑动验证码] 文章目录 [13.1]关于滑动验证码 [13.2]滑动验证码攻克思路 [13.3]模拟登录 bilibili - 总体思 ...

最新文章

  1. AI部署:聊一聊深度学习中的模型权重
  2. Struts2 中#、@、%和$符号的用途
  3. DIV实现CSS 的placeholder效果
  4. 嵌入网站的挖矿代码——Monerominer.rocks
  5. c++------------之---【虚析构函数应用】
  6. 应届生web前端面试题_Web前端初学者(应届生)面试攻略
  7. 增值税税控设备(计算机打印机)全额抵扣,在航天金穗购买的打印机、扫描仪是否属于防伪税控设备...
  8. visio安装报错 1:1935 2:{XXXXXXXX...
  9. 线性代数 计算机 视频教程,哈工大:线性代数教学视频
  10. 大话西游中的这些经典元素,注意到没?
  11. 多线程编译与运行linux,Linux系统下多线程程序编译makefile文件
  12. Tensorflow小白实战系列
  13. matlab与vs混合编程,matlab与vs混合编程/matlab移植
  14. 第三方、第四方扫二维码的支付平台有哪些?
  15. 苹果开发者账号申请流程--企业
  16. transition和transform
  17. 贴一点代码(用VC实现在WINXP下的宽带拨号)
  18. JIRA 从低版本升级到高版本(3 6 2- 6 0 8)
  19. 【车间调度】基于matlab遗传算法求解车间调度问题(含甘特图)【含Matlab源码 2216期】
  20. excel - 选择无限远区域(无穷区域)+ 取消隐藏 第一行

热门文章

  1. SSM毕设项目二手车交易平台g65e5(java+VUE+Mybatis+Maven+Mysql)
  2. 微信支付之企业付款--微信商户后台没有“企业付款到零钱”解决方案
  3. 一款开源的Java完整停车场系统项目(附源码)
  4. 【2013 省赛试题】错误票据
  5. LeetCode之换酒问题(一千五百一十八)
  6. JavaScript 的闭包用于什么场景
  7. 进击的大数据(六)数据采集模块的设计
  8. KOL营销,应该这么做
  9. 修改cmd 命令行中的用户名|C:\Users\下的用户名
  10. 中南民族大学计算机科学学院2011级2014年至2015年度课表,中南财经政法大学2011年校内辅修双学位报名通知...