很久没有写爬虫相关的文章了,因为现在大多数时间都在写Web相关的代码。 今天朋友问我软考成绩咋样,我才知道成绩出来了。 查了一下,成绩很理想,不出乎我的意料之外。因为:雨过天晴,糟糕的近期,总算迎来了晴天
这不是重点,今天来研究一下软考成绩查询网站。
可以看见,页面中有两个查询方式,根据准考证号查询以及根据身份证号查询,以及查询都需要验证码。 看到验证码,首先看下他的逻辑有没有问题,就是看能不能跳过二维码。 所以我直接点击提交。
它发送了一个网络请求VerifyCaptcha,然后返回的preview是验证码错误。 到这里还不能确定他的验证码是否可以跳过继续。 我们输入正确的验证码后点击查询。
可以看见这次的返回值为ok,并且进行了查询,返回了查询结果为空。
我们看一下这个result的网络请求。
请求方式:Post 发送了表单数据:
stage: 2021年上半年 xm: 11 zjhm: 11 jym: 8221 select_type: 1 上述参数直接猜都猜得出吧。年份,姓名,证件号码,验证码,查询方式。
然后我们用Python写一个请求试一下。
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请求 先请求一次验证码获取接口,将图片保存在本地,
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)
然后等用户打开验证码图片识别之后输入验证码再发送查询成绩的网络请求。
data = {
'stage': '2021年上半年',
'xm': '姓名',
'zjhm': '证件号码',
'jym': input('请输入验证码'),
'select_type': '1',
}
print(session.post(url=url, data=data).json())
查询成功,然后你就可以再结合结合放到Web啥的