没什么用的废话
很久没有写爬虫相关的文章了,因为现在大多数时间都在写Web相关的代码。 今天朋友问我软考成绩咋样,我才知道成绩出来了。 查了一下,成绩很理想,不出乎我的意料之外。因为:雨过天晴,糟糕的近期,总算迎来了晴天
这不是重点,今天来研究一下软考成绩查询网站。
官网查成绩地址: https://query.ruankao.org.cn/score/main
页面及网络请求分析
验证码分析
可以看见,页面中有两个查询方式,根据准考证号查询以及根据身份证号查询,以及查询都需要验证码。 看到验证码,首先看下他的逻辑有没有问题,就是看能不能跳过二维码。 所以我直接点击提交。
它发送了一个网络请求VerifyCaptcha,然后返回的preview是验证码错误。 到这里还不能确定他的验证码是否可以跳过继续。 我们输入正确的验证码后点击查询。
可以看见这次的返回值为ok,并且进行了查询,返回了查询结果为空。
我们看一下这个result的网络请求。
请求方式:Post 发送了表单数据:
stage: 2021年上半年 xm: 11 zjhm: 11 jym: 8221 select_type: 1 上述参数直接猜都猜得出吧。年份,姓名,证件号码,验证码,查询方式。
然后我们用Python写一个请求试一下。
代码语言:javascript复制import requests
url = 'https://query.ruankao.org.cn//score/result'
data = {
'stage': '2021年上半年',
'xm': 'lan',
'zjhm': '666',
'jym': '7777',
'select_type': '1',
}
print(requests.post(url=url, data=data).json())
看来验证码不能跳过,所以有以下几种方法。
- 保存验证码,用户输入后再提交请求。
- 将验证码上传至第三方验证码识别平台,返回验证码后提交请求。 这里为了方便采用第一种。
过验证码
看一下他验证码是怎么请求的。
GET请求,获取验证码图片。 所以新建一个长链接Session请求 先请求一次验证码获取接口,将图片保存在本地,
代码语言:javascript复制import requests
import time
session = requests.session()
url = 'https://query.ruankao.org.cn//score/result'
with open('a.png', 'wb') as f:
f.write(session.get(f'https://query.ruankao.org.cn//score/captcha?{time.time() * 1000}').content)
然后等用户打开验证码图片识别之后输入验证码再发送查询成绩的网络请求。
代码语言:javascript复制data = {
'stage': '2021年上半年',
'xm': '姓名',
'zjhm': '证件号码',
'jym': input('请输入验证码'),
'select_type': '1',
}
print(session.post(url=url, data=data).json())
查询成功,然后你就可以再结合结合放到Web啥的