python爬虫模拟登录之图片验证码如何实现(python,开发技术)

时间:2024-05-01 00:35:43 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

首先,打开百度智能云进行登入,再进入人工智能->文字识别里创建应用。

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

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

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

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

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

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

之后要在pycharm下载baidu-aip,然后导入AipOcr包。

fromaipimportAipOcr#aip在baidu-aip中

再然后就是初始化百度API

#百度API
APP_ID='你的之前拿到的AppID'
API_KEY='你的之前拿到的APIKey'
Secret_Key='你的之前拿到的SecretKey'

我们先要把 图片验证码下载下来进行二值化处理,这样识别的准确率高一些。

这里要下载pillow库,然后导入Image包

fromPILimportImage#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=[]
foriinrange(256):
ifi<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

#读取处理后的验证码
withopen('code.jpg','rb')asfp:
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--
importrequests
fromPILimportImage
fromaipimportAipOcr

ifname=="main":

百度API

APP_ID='你的之前拿到的AppID'
API_KEY='你的之前拿到的APIKey'
Secret_Key='你的之前拿到的SecretKey'

headers={
"user-agent":"Mozilla/5.0(WindowsNT10.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&#39;

下载验证码图片

session=requests.session()
img_data=session.get(url=url,headers=headers).content
withopen('./code.jpg','wb')asfp:
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=[]
foriinrange(256):
ifi<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')

读取处理后的验证码

withopen('code.jpg','rb')asfp:
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爬虫模拟登录之图片验证码如何实现的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:JavaScript中window对象的成员属性实例分析下一篇:

14 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18