Python 爬虫验证码识别

  • 1. 百度智能云
  • 2. 使用
    • 2.1 API 文档使用
    • 2.2 SDK 文档使用
  • 3. 获取古诗文网验证码

免责声明:自本文章发布起, 本文章仅供参考,不得转载,不得复制等操作。浏览本文章的当事人如涉及到任何违反国家法律法规造成的一切后果由浏览本文章的当事人自行承担与本文章博客主无关。以及由于浏览本文章的当事人转载,复制等操作涉及到任何违反国家法律法规引起的纠纷和造成的一切后果由浏览本文章的当事人自行承担与本文章博客主无关。

1. 百度智能云

我用的是百度智能云, 云打码平台估计已无几人在用.
https://cloud.baidu.com/
进行登录和注册.

开始用都是免费的, 对于仅供学习 OCR 文字识别够用的.
尝试了三个, 各有利弊.

2. 使用

两个使用, SDK 支持多种语言.

2.1 API 文档使用

跳转到 Access Token获取 的连接中.
下面有关于 Python 的使用方法.

通过官方文档总结了一个:
下面的为 ocr.py 文件.

#!/usr/bin/env python
# -*- coding: UTF-8 -*-import requests
import base64'''
百度 ocr 提供了模板
验证码识别
'''# 得到 access_token
def get_access_token(client_id, client_secret):# client_id 为官网获取的 AK, client_secret 为官网获取的 SK.host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}'response = requests.get(host)if response:print(response.json())return response.json()["access_token"]'''
client_id: API Key
client_secret: Secret Key
url_img: 照片的 URl
type_: 选择识别的方式, 默认为 webimage_loc.- general: 通用文字识别(标准含位置版)- accurate: 通用文字识别(高精度含位置版)- webimage_loc: 网络图片文字识别(含位置版)
'''# 得到结果
def baidu_OCR(client_id, client_secret, url_img, type_="webimage_loc"):request_url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/{type_}"# urlrequest_url = request_url + "?access_token=" + get_access_token(client_id, client_secret)# 图片文件的二进制形式b_img = requests.get(url_img).content# b_img = open('./data/4.png', 'rb').read()img = base64.b64encode(b_img)# 参数params = {"image": img}headers = {'content-type': 'application/x-www-form-urlencoded'}# 请求response = requests.post(request_url, data=params, headers=headers)# 返回结果if response:print(response.json())return response.json()["words_result"][0]["words"]

引用上面的方法

#!/usr/bin/env python
# -*- coding: UTF-8 -*-import ocrif __name__ == '__main__':# API Keyclient_id = "client_id"# Secret Keyclient_secret = "client_secret"# 照片的路径url_img = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605085260223&di=f3ac8274fc8d8aa5830cfdd0e75e5586&imgtype=0&src=http%3A%2F%2Fimg3.itboth.com%2F11%2F96%2FM3Enmm.jpg"# 输出识别后的结果# print(baidu_OCR(client_id, client_secret, url_img))print(ocr.baidu_OCR(client_id, client_secret, url_img, type_="general"))print(ocr.baidu_OCR(client_id, client_secret, url_img, type_="accurate"))print(ocr.baidu_OCR(client_id, client_secret, url_img, type_="webimage_loc"))

2.2 SDK 文档使用

在 PyCharm 下直接安装完 baidu-aip 即可.
下面就有使用方法.


按照文档:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-import requests
from aip import AipOcr'''
调用百度 ocr 接口
验证码识别
'''# 读取图片
def get_file_content(url_img):# 图片文件的二进制形式return requests.get(url_img).contentif __name__ == '__main__':""" 你的 APPID AK SK """APP_ID = 'APP_ID'API_KEY = 'API_KEY'SECRET_KEY = 'SECRET_KEY'# SDK客户端client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 照片连接url_img = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605085260223&di=f3ac8274fc8d8aa5830cfdd0e75e5586&imgtype=0&src=http%3A%2F%2Fimg3.itboth.com%2F11%2F96%2FM3Enmm.jpg"# 读取图片image = get_file_content(url_img)# 如果有可选参数options = {"recognize_granularity": "big","detect_direction": "true","vertexes_location": "true","probability": "true"}# 调用通用文字识别(含位置信息版), 图片参数为远程 url 图片generalUrl = client.generalUrl(url_img)print(generalUrl)print(generalUrl["words_result"][0]["words"])# 带参数调用通用文字识别(含位置高精度版)accurate = client.accurate(image, options)print(accurate)print(accurate["words_result"][0]["words"])# 调用网络图片文字识别, 图片参数为远程 url 图片web_image_url = client.webImageUrl(url_img)print(web_image_url)print(web_image_url["words_result"][0]["words"])

3. 获取古诗文网验证码

古诗文网
https://so.gushiwen.cn/user/login.aspx
这里只获取验证码, 登录在后面.

需要 gif 转 png 格式, 需要安装 pillow

#!/usr/bin/env python
# -*- coding: UTF-8 -*-import requests
from lxml import etree
from aip import AipOcr
from PIL import Image# gif 转化为 png
def gif_png(img_path, img_name):im = Image.open(img_path)# gif 转化为 pngdef iter_frames(image):try:j = 0while 1:image.seek(j)image_frame = image.copy()palette = image_frame.getpalette()if j > 0:image_frame.putpalette(palette)yield image_framej += 1except EOFError:passfor i, frame in enumerate(iter_frames(im)):frame.save(img_name, **frame.info)# 读取文件
def get_file_content(file_path):with open(file_path, 'rb') as fp:return fp.read()# 得到验证码
def getCode(url_image):# 保存照片with open("./data/login.gif", 'wb') as f:f.write(requests.get(url_image).content)""" 你的 APPID AK SK """APP_ID = 'APP_ID'API_KEY = 'API_KEY'SECRET_KEY = 'SECRET_KEY'# SDK客户端client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 转化gif_png("./data/login.gif", "./data/login.png")url_content = get_file_content("./data/login.png")# 调用通用文字识别(含位置信息版)general_url = client.general(url_content)return general_url["words_result"][0]["words"]if __name__ == '__main__':# url, UAurl = "https://so.gushiwen.cn/user/login.aspx"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"}# 爬取text = requests.get(url=url, headers=headers).text# 解析tree = etree.HTML(text, etree.HTMLParser(encoding="utf-8"))# 得到照片 urlurl_img = "https://so.gushiwen.cn" + tree.xpath("//img[@id='imgCode']/@src")[0]# 得到验证码login_code = getCode(url_img)print(login_code)

效果如下, 个人感觉精度不算太高, 但免费的也可以了.

Python 爬虫云验证码识别相关推荐

  1. python生成图片base64编码及阿里云验证码识别

    一.问题背景 自动化测试时,注册页面需要输入验证码,为此需要截取下验证码图片,然后调用识别出其中文字信息,以模拟输入 阿里云验证码识别api链接 通过此链接可以查看此api调用信息: 如下是api调试 ...

  2. 爬虫:验证码识别准确率(Tesseract-OCR)

    爬虫:验证码识别准确率(Tesseract-OCR) 现在的网站为了防止人们轻易的获取登陆后的页面信息,在登陆上设置了很多的障碍,验证码就是其中的一种,所谓道高一尺,魔高一丈,人们总能想出办法来予以应 ...

  3. 写爬虫遇到验证码识别问题的解决方案

    写爬虫遇到验证码识别问题的解决方案 遇到滑块问题 在写爬虫的时候,经常会遇到滑块问题,很多次都想过尝试如何攻破滑块,但是每次都没成功,除了最开始的极验滑块,当时通过原图和滑块图的对比,能够得出缺口坐标 ...

  4. 图片识别 就用uu云验证码识别平台

    图片识别 就用uu云验证码识别平台 我相信很多朋友和我一样都有这样的困扰,经常要将图片或者扫描文件中的文字提取出来,保存在我们的文档中去.但是用了很多软件,效果都不是很理想,还是需要自己人工去核对,大 ...

  5. 验证码识别的作用 优优云验证码识别软件

    验证码识别的作用 优优云验证码识别软件          如今已经是一个互联网流行的时期,而早在21世纪刚刚来临之际,人们对于互联网就已经并不陌生了.作为21世纪的新型人类来说,互联网更是我们生活中不 ...

  6. python免费的验证码识别OCR库

    python免费的验证码识别OCR库 免费的验证码识别OCR项目已经打包成pypi包 1, 可以通过以下命令安装 pip install ddddocr -i https://pypi.org/sim ...

  7. python爬虫遇到验证码、输入验证码后提醒验证码错误_爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别...

    前言 在我们写爬虫的过程中,目标网站常见的干扰手段就是设置验证码等,本就将基于Selenium实战讲解如何处理弹窗和验证码,爬取的目标网站为某仪器预约平台 可以看到登录所需的验证码构成比较简单,是彩色 ...

  8. Python爬虫理论 | (6) 进阶反反爬虫技术 --- 验证码识别

    目录 1. 验证码原理 2. 常见验证码识别 2.1 图片验证码 2.2 滑动验证码 2.3 点触验证码 3. 实战 1. 验证码原理 验证码(CAPTCHA),"Completely Au ...

  9. 用爬虫实现验证码识别并模拟登陆和cookie操作、代理操作、线程池

    一.模拟登陆 1.为什么要进行模拟登陆 有时,我们需要爬取一些基于个人用户的用户信息(需要登陆后才可以查看) 2.为什么要需要识别验证码 因为验证码往往是作为登陆请求中的请求参数被使用 3.验证码识别 ...

最新文章

  1. effective stl 条款15 小心string实现的多样性
  2. c++map的使用_mybatis源码 | mybatis插件及动态代理的使用
  3. 查看mysql8日志_mysql8 参考手册--通用查询日志
  4. Netty原理和使用
  5. idea 导出war包_使用IDEA实现远程代码DEBUG调试教程详解
  6. kubernetes精华问答 | Swarm和K8S的共同点有哪些?
  7. 屈原的《离骚》《天问》《九歌》《楚辞》
  8. Ubuntu16.04再次装机记
  9. Android4.4 多媒体开发(五)----OpenMax简介
  10. 微信小程序搭建tabbar
  11. 基于stm32 ESP8266WiFi模块的基本通信
  12. Virtualbox使用及问题
  13. java vo的使用_使用VO传递参数的设计 | 学步园
  14. 使用搜狗输入法实现对代码快捷注释
  15. matlab限幅器无饱和怎么设置,基于MATLAB 的直流电动机双闭环调速系统的仿真研究...
  16. 原创 PDF 电子书 V4.0,限时免费下载!
  17. 一行代码解决scp在Internet传输慢的问题
  18. 区分a++和++a,浅谈两者的效率问题
  19. java ajax无权限跳转_ajax请求重定向后页面不跳转问题 (使用拦截器)
  20. 微商视频引流怎么做?微营销里面的核武器

热门文章

  1. access denied by server while mounting
  2. node.js域名解析
  3. [铁道部信息化管理]12306的已知信息、数据及问题
  4. electron+vue+elementui实现类似QQ窗口靠边自动边缘隐藏,electron+vue桌面应用项目框架搭建
  5. 童言无忌的最高境界(笑到抽筋)
  6. 大数据---MySQL基础---day1
  7. 在追赶电竞产业的起跑线上,香港是否已经败给了自大和贪婪?
  8. oracle命令创建新用户
  9. PIX入选Autodesk硅谷技术中心,以生成设计和金属增材制造落地L4自动驾驶通用底盘
  10. Android Animation 动画——translate解析图