# 背景

报名了学校 "2021 小学期网络攻防实践创新课程",然后这样公布了名单。。

<img src="https://z3.ax1x.com/2021/06/07/2dyBz6.png" width="500px">

该说不愧是搞安全的ヘ (_ _ヘ),攻防开始。拿一堆 md5 加密过的东西放上去,倒是能查到自己的,不过还有点好奇同专业的同学还有谁选上这门课了,写个爬虫玩玩。

md5: 一种不可逆的加密算法

# 思路

目前手中的资料有:

  • 全专业同学的学号与姓名名单
  • 入选同学的学号姓名(上图,加密过的)
  • 随手找的一个 md5 加密网站:https://www.qvdv.com/tools/qvdv-md5 顺带 api 是:https://www.qvdv.com/tools/qvdv-md5-_index.html

打算拿学号那一栏去对比。查询每个人学号加密后的结果,如果在入选名单中出现就是被选上啦,,

具体请求方式是这样的,POST 加上 form 参数:

<img src="https://z3.ax1x.com/2021/06/07/2dgdij.png" width="500px">

# 代码实现

大部分时间花在了 excel 表格的处理上,不太会玩 QAQ

提前准备了 全部人员信息表格 total.xlsx ,通过人员 md5 加密的表格 pass.xlsx

import requests as rq
from bs4 import BeautifulSoup
import json
import csv
from openpyxl import load_workbook as readxl
from openpyxl import Workbook
#设置要爬取的 url
url = "https://www.qvdv.com/tools/qvdv-md5-_index.html"
#读取全部信息表格,第一个工作表
table = readxl('./total.xlsx')
totSheet = table.worksheets[0]
#print(totSheet[1][1].value)
#读取通过者名单表格
table = readxl('./pass.xlsx')
passSheet = table.worksheets[0]
#稍微打包一下方便查找
passerMd5 = []
for passer in passSheet:
  passerMd5.append(passer[0].value)
#准备输出到这里
#创建一个 Workbook 对象
wb = Workbook()
#新建一张表
wb.create_sheet("sheet1") 
# 获取当前活跃的 sheet,默认为第一张 sheet
table = wb.active
#tot 记录总人数,顺带当作表格的索引,顺带这个是从 1 开始计数的
tot = 1
#循环所有人名单查找通过者
for stu in totSheet:
  #打包要 post 的 form 数据
  data = {
  #这里通过学号的 md5 来找
  "code": stu[0].value,
  "codeType": "x32"
  }
  #post 请求获取 md5 值
  res = rq.post(url, data)
  #返回一个字符串,转成 json 再找 data 就是学号对应的 md5 值
  md5Value = json.loads(res.text)["data"]
  #当前对象在通过名单中,加入表格
  if (md5Value in passerMd5):
    table.cell(tot, 1, stu[0].value)
    table.cell(tot, 2, stu[1].value)
    tot += 1
#保存表格
wb.save("passers.xlsx")
更新于