python爬虫模拟登录之图片验证码实现

08-05 38阅读 0评论

文章最后更新时间:2022年08月09日

我们在用爬虫对门户网站进行模拟登录是总会有输入图片验证码的,例如这种

python爬虫模拟登录之图片验证码实现

那我们怎么解决这个问题实现全自动的模拟登录呢?只要思想不滑坡,办法总比困难多。我这里使用的是百度智能云里面的文字识别功能,每天好像可以免费使用个几百次,识别效果也还行,对一般人而言是够用了。

接下来说说,怎么使用。

首先,打开百度智能云(https://cloud.baidu.com/)进行登入,再进入人工智能->文字识别里创建应用

python爬虫模拟登录之图片验证码实现

在使用名称和底下应用描述随便写写,然后点立即创建。

python爬虫模拟登录之图片验证码实现

python爬虫模拟登录之图片验证码实现

创建完成,就可以拿到ApPIDAPI Key 、Secret Key

python爬虫模拟登录之图片验证码实现

之后要在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')

对于那些有干扰线,特别还是明暗交替的图片验证码来说,这样很好的避免了被干扰。

这里的图片中没有太多干扰线且也没有明暗交替所以看起来不明显,只是想让大家看看对比。

处理前   处理后

python爬虫模拟登录之图片验证码实现

python爬虫模拟登录之图片验证码实现

后面就是调用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'])

python爬虫模拟登录之图片验证码实现

这只是百度智能云里面的一个小功能,还有很多其他的功能,大家感兴趣可以去看看百度智能云里面的官方文档,还有视频教程

总结

到此这篇关于Python爬虫模拟登录之图片验证码实现的文章就介绍到这了,更多相关python爬虫图片验证码内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,38人围观)

还没有评论,来说两句吧...