验证码识别
一、简介
验证码和爬虫之间的爱恨情仇?
反爬机制:验证码,识别验证码图片中的数据用于模拟相关操作。
识别验证码的操作
- -人工肉眼识别(不推荐)
- -第三方自动识别(推荐)
第三方平台
1.平台操作
-
超级鹰
链接:http://www.chaojiying.com/user/
注册账号后,创建一个新软件,这个软件的ID和名称以及自己账号密码都要用到。
点击开发文档-》python语言
Python语言Demo下载-超级鹰验证码识别API接口 (chaojiying.com)
把下载好的压缩包解压后放进代码目录
2.使用
找到要使用的代码
chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '96001') #用户中心>>软件ID 生成一个替换 96001
im = open('a.jpg', 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(chaojiying.PostPic(im, 1902)) #1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
#print chaojiying.PostPic(base64_str, 1902) #此处为传入 base64代码
把代码粘贴到启动方法
修改上述信息为自己的内容
验证码类型查看:验证码类型与价格表-超级鹰验证码识别 (chaojiying.com)
二、实战
1.验证码识别
登录古诗文网 (gushiwen.cn)
-1.将验证码图片进行本地下载
-2.调用平台提供的示例代码进行图片示例识别
import requests
from lxml import etree
from chaojiying import Chaojiying_Client
import os
if not os.path.exists('./imgs'):
os.mkdir('./imgs')
#将验证码下载到本地
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77'
}
#请求图片链接
page_text=requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
img_src = 'https://so.gushiwen.cn/'+tree.xpath('//img[@id="imgCode"]/@src')[0]
print("图片链接:",img_src)
#下载验证码图片到imgs文件夹
img_data = requests.get(url=img_src,headers=headers).content
with open('./img'+'验证码'+'.jpg','wb') as fp:
fp.write(img_data)
#识别验证码
chaojiying = Chaojiying_Client('你自己的账号', '密码', 'www') #用户中心>>软件ID 生成一个替换 96001
im = open('./img'+'验证码'+'.jpg', 'rb').read()
result_dic = chaojiying.PostPic(im, 1902)#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(result_dic)
print('验证码',result_dic.get('pic_str'))
总结
获取页面的验证码图片还是以前的知识,识别验证码则是直接调用
2.模拟登录
分析
-为什么模拟登录?
-爬取基于某些用户的用户信息。
-需求
-对人人网进行模拟登录
-人人网注册太麻烦,直接继续使用古诗文网
https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx
-原理
-点击登录按钮之后会发起一个post请求
-post请求中会携带登录之前录入的相关的登录信息(用户名、密码、验证码...)
-验证码每次请求都会变化---和每次登录的请求意义对应