python爬虫模拟登录之图片验证码实现详解
作者:start?field 发布时间:2022-06-30 00:07:29
我们在用爬虫对门户网站进行模拟登录是总会有输入图片验证码的,例如这种
那我们怎么解决这个问题实现全自动的模拟登录呢?只要思想不滑坡,办法总比困难多。我这里使用的是百度智能云里面的文字识别功能,每天好像可以免费使用个几百次,识别效果也还行,对一般人而言是够用了。
接下来说说,怎么使用。
首先,打开百度智能云(https://cloud.baidu.com/)进行登入,再进入人工智能->文字识别里创建应用。
在使用名称和底下应用描述随便写写,然后点立即创建。
创建完成,就可以拿到 AppID 、API Key 、Secret Key
之后要在pycharm下载baidu-aip,然后导入AipOcr包。
from aip import AipOcr? ? ? ?#aip在baidu-aip中
再然后就是初始化百度API
#百度API
APP_ID = '你的之前拿到的AppID'
API_KEY = '你的之前拿到的API Key'
Secret_Key = '你的之前拿到的Secret Key'
我们先要把 图片验证码下载下来进行二值化处理,这样识别的准确率高一些。
这里要下载pillow库,然后导入Image包
from PIL import Image #PIL在pillow库中
#图片处理
# 二值化处理 灰度阈值设为127,高于这个值的点全部填白色
img_old = Image.open('code.jpg')
img_old = img_old.convert('L') # 灰度图 模式“L” 每个像素用8个bit表示,0表示黑,255表示白
threshld = 127 #设置阈值,图片的像素范围(0,255)
table = []
for i in range(256):
if i <threshld:
table.append(0)
else:
table.append(1)
img_old = img_old.point(table,'1') # 对图像像素操作 模式“1” 为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白
img_old.save('code.jpg')
对于那些有干扰线,特别还是明暗交替的图片验证码来说,这样很好的避免了 * 扰。
这里的图片中没有太多干扰线且也没有明暗交替所以看起来不明显,只是想让大家看看对比。
处理前 处理后
后面就是调用baidu_aip来读取图片中的内容。baidu_aip.handwriting
#读取处理后的验证码
with open('code.jpg','rb') as fp:
img_new = fp.read()
baidu_aip = AipOcr(APP_ID,API_KEY,Secret_Key)
result = baidu_aip.handwriting(img_new) #使用的是识别手写文字,返回一个字典,其中words_result是一个列表,里面有识别结果也是一个字典
print('验证码是:',result['words_result'][0]['words'])
baidu_aip.handwriting这里面有很多识别文字的方法,我用的是识别手写文字,如果大家使用这个方法感觉效果不好可以选择其他方法。
最后是完整的代码。
# -- coding:UTF-8 --
import requests
from PIL import Image
from aip import AipOcr
if __name__ == "__main__":
#百度API
APP_ID = '你的之前拿到的AppID'
API_KEY = '你的之前拿到的API Key'
Secret_Key = '你的之前拿到的Secret Key'
headers = {
"user-agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 97.0.4692.71Safari / 537.36Edg / 97.0.1072.55"
}
url = 'http://www.hyocr.com/captcha.php'
#下载验证码图片
session = requests.session()
img_data = session.get(url=url,headers=headers).content
with open('./code.jpg','wb') as fp:
fp.write(img_data)
#图片处理
# 二值化处理 灰度阈值设为127,高于这个值的点全部填白色
img_old = Image.open('code.jpg')
img_old = img_old.convert('L') # 灰度图 模式“L” 每个像素用8个bit表示,0表示黑,255表示白
threshld = 127 #设置阈值,图片的像素范围(0,255)
table = []
for i in range(256):
if i <threshld:
table.append(0)
else:
table.append(1)
img_old = img_old.point(table,'1') # 对图像像素操作 模式“1” 为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白
img_old.save('code.jpg')
#读取处理后的验证码
with open('code.jpg','rb') as fp:
img_new = fp.read()
baidu_aip = AipOcr(APP_ID,API_KEY,Secret_Key)
result = baidu_aip.handwriting(img_new) #使用的是识别手写文字,返回一个字典,其中words_result是一个列表,里面有识别结果也是一个字典
print('验证码是:',result['words_result'][0]['words'])
这只是百度智能云里面的一个小功能,还有很多其他的功能,大家感兴趣可以去看看百度智能云里面的官方文档 ,还有视频教程。
来源:https://blog.csdn.net/qq_53221728/article/details/122964257


猜你喜欢
- 没有使用igraph库哦 因为我还没学小世界网络简介:1998年, Watts和Strogatz 提出了小世界网络这一概念,并建立了WS模型
- 通过无能的baidu逛了一圈,发现有两三段能用的代码,不过参考之下,发现还有不足的:不能拷贝有合并格式的sheet、没有拷贝cell的相关格
- keras中的Reshapekeras自带from keras.layers import Reshapelayer_1 = Reshape
- 1、python多进程编程背景python中的多进程最大的好处就是充分利用多核cpu的资源,不像python中的多线程,受制于GIL的限制,
- 最近看到大家都练习写树,偶也学习学习写了一个,大家多多批评,我好进步。不过我看了一些树的xml文档都是在xml中就已经有了树的结构,所以我写
- 前言NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自
- 本文实例为大家分享了java连接mysql底层封装代码,供大家参考,具体内容如下连接数据库package com.dao.db;import
- 大家都知道Js有同源策略,就是主域名不同嵌套的iframe不允许Js通信的。比如我有一个网站,网站中要嵌入其网站的页面。那么我可
- 如何使用Office Chart 9.0 制作图表?代码如下:chart90.asp<HTML><HEAD><
- 实例如下所示:>>> import pandas as pd>>> df = pd.DataFrame(
- 今天来学习变量优化问题。寻找使成本函数最小的题解。适用于题解相互独立的情况,设计随机优化算法、爬山法、模拟退火算法、遗传算法。优化问题的的精
- 前言之前已经介绍过了Vue + Webpack + Vue-loader的相关功能介绍,大家可以点击这篇文章了解详情。下面就来看看相关配置篇
- 从wind上面搞到一批股票数据后发现:本来是一个类型的数据,但是由于季度不同,列名也不同,导致使用pandas合并多个报表的时候总是出现一大
- 目录一、运行效果二、实现方法1. 爬虫部分2.Tkinter部分三、打包四、代码获取今天咱们用Python爬虫和Tkinter界面来做一个翻
- mysql的root账户,我在连接时通常用的是localhost或127.0.0.1,公司的测试服务器上的mysql也是localhost所
- 作为Python开发者,你迟早都会用到图形用户界面来开发应用。本文将推荐一些 Python GUI 框架,希望对你有所帮助,如果你有其他更好
- 概述今天我们要来做一个进阶的花分类问题. 不同于之前做过的鸢尾花, 这次我们会分析 102 中不同的花. 是不是很上头呀.预处理导包常规操作
- 一个简单的JS显示日期代码,可以显示星期几<script type="text/javascript">fu
- MySQL中的锁锁是为了解决并发环境下资源竞争的手段,其中乐观并发控制,悲观并发控制和多版本并发控制是数据库并发控制主要采用的技术手段(具体
- 目录一、前言二、方法1、代码2、运行一、前言SpringBoot作为后端开发框架,有强大且方便的处理能力。但是作为一个结合数据分析+前台展示