一、古诗文网案例
1.获取登录接口的请求地址
2.获取解析验证码图片链接
#解析图片链接 https://so.gushiwen.cn/RandCode.ashx
xml=etree.HTML(r.text)
img_src='https://so.gushiwen.cn'+xml.xpath('//img[@id="imgCode"]/@src')[0]
print(img_src)
3.将其保存在本地
img_data=self.s.get(img_src,headers=self.headers).content with open('code.png','wb')as f: f.write(img_data)
4.但由于验证码是动态的,每次都不一样,所以解决方案——session会话来维持
#实例化session self.s=requests.session()
5.得到图片后,想要将其读取出来——需要用到超级鹰
二、超级鹰的使用
1.进入超级鹰平台(超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大 (chaojiying.com)
2.新用户点击注册即可,随后进入用户中心界面
3.积分购买1元——1000积分,验证码一次10积分
4.进入价格体系中可以查看套餐价格,在本次案例中选择1004进行
5.点击进入用户中心,点击软件id——点击生成一个软件id
6.如何使用?
进入开发文档,选择python然后下载即可
下载好了之后解压并复制到项目同级下面。
修改chaojiying.py文件——账号,密码,软件id
在项目中使用
chaojiying = Chaojiying_Client('18975935829', 'zxia0677', ' 951854') # 用户中心>>软件ID 生成一个替换 96001 im = open('code.png', 'rb').read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要// result=chaojiying.PostPic(im,1004) print(result)
代码案例:
import requests
from lxml import etree
from chaojiying_Python.chaojiying import Chaojiying_Client
#登录接口
class Spider():
def __init__(self):
#首页接口
self.url='https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
self.data = {
'__VIEWSTATE':' 9GkOE0VPlFW/0FQ2VRS1kp7Re1dqhowRVJXxibJ3AS6xU3RfBluHF+5kd4CPjJp/caTeLEogHDyngZjDkz9nzsB3iZGJ7+TjkuRyyRKbmSM93J+aglgHmJvkQA7l+PxGjofFFWu7knx5HrIY+W4WAovaeLY=',
'__VIEWSTATEGENERATOR':' C93BE1AE',
'from':' http://so.gushiwen.cn/user/collect.aspx',
'email':' 18975935829',
'pwd':' zxia0677',
'code':' HPWU',
'denglu':' 登录',
}
self.headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}
#实例化session
self.s=requests.session()
#像首页发请求 得到图片链接
def get_data(self):
r = self.s.get(self.url,headers=self.headers)
# print(r.text)
#解析图片链接 https://so.gushiwen.cn/RandCode.ashx
xml=etree.HTML(r.text)
img_src='https://so.gushiwen.cn'+xml.xpath('//img[@id="imgCode"]/@src')[0]
print(img_src)
img_data=self.s.get(img_src,headers=self.headers).content
with open('code.png','wb')as f:
f.write(img_data)
chaojiying = Chaojiying_Client('18975935829', 'zxia0677', ' 951854') # 用户中心>>软件ID 生成一个替换 96001
im = open('code.png', 'rb').read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
result=chaojiying.PostPic(im,1004)
print(result)
return result
def post_img(self):
result=self.get_data()
self.data['code']=result
if __name__ == '__main__':
s = Spider()
# s.get_data()
s.post_img()
显示结果: