python网络爬虫系列(九) |
您所在的位置:网站首页 › 爬虫识别图片内容 › python网络爬虫系列(九) |
验证码处理
学习目标
了解 验证码的相关知识掌握 图片识别引擎的使用了解 常见的打码平台掌握 通过打码平台处理验证码的方法
1.图片验证码
1.1 什么是图片验证码 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。1.2 验证码的作用 防止恶意破解密码、刷票、论坛灌水、刷页。有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),我们利用比较简易的方式实现了这个功能。虽然登录麻烦一点,但是对网友的密码安全来说这个功能还是很有必要,也很重要。1.3 图片验证码在爬虫中的使用场景 注册登录频繁发送请求时,服务器弹出验证码进行验证1.4 图片验证码的处理方案 手动输入(input) 这种方法仅限于登录一次就可持续使用的情况图像识别引擎解析 使用光学识别引擎处理图片中的数据,目前常用于图片数据提取,较少用于验证码处理打码平台 爬虫常用的验证码解决方案 2.图片识别引擎OCR(Optical Character Recognition)是指使用扫描仪或数码相机对文本资料进行扫描成图像文件,然后对图像文件进行分析处理,自动识别获取文字信息及版面信息的软件。 2.1 什么是tesseract Tesseract,一款由HP实验室开发由Google维护的开源OCR引擎,特点是开源,免费,支持多语言,多平台。项目地址:https://github.com/tesseract-ocr/tesseract下载地址:https://digi.bib.uni-mannheim.de/tesseract/参考博文:https://blog.csdn.net/jacke121/article/details/76038663 2.2 图片识别引擎环境的安装1 引擎的安装 mac环境下直接执行命令 brew install --with-training-tools tesseractwindows环境下的安装 可以通过exe安装包安装,下载地址可以从GitHub项目中的wiki找到。安装完成后记得将Tesseract 执行文件的目录加入到PATH中,方便后续调用。 linux环境下的安装 sudo apt-get install tesseract-ocr2 Python库的安装 # PIL用于打开图片文件 pip/pip3 install pillow # pytesseract模块用于从图片中解析数据 pip/pip3 install pytesseract 2.3 图片识别引擎的使用 通过pytesseract模块的 image_to_string 方法就能将打开的图片文件中的数据提取成字符串数据,具体方法如下 from PIL import Image import pytesseract # 打开一个图片文件 im = Image.open('test2.png') result2 = pytesseract.image_to_string(im) print(result2)现在很多网站都会使用验证码来进行反爬,所以为了能够更好的获取数据,需要了解如何使用打码平台爬虫中的验证码 2 常见的打码平台云打码:http://www.yundama.com/ 能够解决通用的验证码识别 极验验证码智能识别辅助:http://jiyandoc.c2567.com/ 能够解决复杂验证码的识别 3 云打码的使用下面以云打码为例,了解打码平台如何使用 3.1 云打码官方接口下面代码是云打码平台提供,做了个简单修改,实现了两个方法: indetify:传入图片的响应二进制数即可indetify_by_filepath:传入图片的路径即可识别其中需要自己配置的地方是: username = 'whoarewe' # 用户名 password = '***' # 密码 appid = 4283 # appid appkey = '02074c64f0d0bb9efb2df455537b01c3' # appkey codetype = 1004 # 验证码类型云打码官方提供的api如下: #yundama.py import requests import json import time class YDMHttp: apiurl = 'http://api.yundama.com/api.php' username = '' password = '' appid = '' appkey = '' def __init__(self, username, password, appid, appkey): self.username = username self.password = password self.appid = str(appid) self.appkey = appkey def request(self, fields, files=[]): response = self.post_url(self.apiurl, fields, files) response = json.loads(response) return response def balance(self): data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey} response = self.request(data) if (response): if (response['ret'] and response['ret'] |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |