Aegis1863 / Rush-for-classes

python爬虫——抢课原理

Home Page:https://leesunbowen.github.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

抢课项目

原理

  抓取抢课所post的包,然后复制请求进行重复发送,但是现在存在不够自动化的问题,需要先出现抢课按钮,然后才能复制到请求,所以不能第一时间抢课。

抓包

  先说下抢课原理,个人电脑上点击选课按钮会发送一个信息(暂且称之为信息A)到学校服务器,学校服务器判断有无余量,有余量则抢课成功,无余量则抢课失败,服务器会给个人电脑发送一段返回值(暂且称之为信息B),其中有一个参数代表是否抢课成功,成功返回值是1,不成功是-1,我们要抓取信息A的内容,这样理论上说就可以反复使用,也就是反复申请,信息A中主要包括三个信息,也是我们需要抓的内容:url、headers(爬虫头)、data(表单),不同的课程的选课申请只改变了data表单内容,不改变url和爬虫头。
  怎么抓包?请面向百度自学。主要是理解原理和应用,抓包是自己提取信息,然后作为爬虫的参数。
  只要掌握原理,不同学校、不同类型的网站和服务器,都可以用相同方法抢课。 但是据说少数学校的网站有反爬措施,因此建议先用requests.get()方法尝试爬虫,试探学校网站反爬水平,大部分学校服务器无反爬措施,不会封锁ip

主要文件介绍

js信息转化器

  该程序为抢课程序配套程序,是用以将浏览器上复制到的js格式的爬虫头和表单转化为python字典的程序(在这里为表单数据),转化为字典之后可以写入抢课程序中作为post参数,js格式的信息不能在py中直接使用。也可以将该代码整合进主程序中。

  另外,无法直接通过json库的json.dumps()实现,若用此方法,还需进一步处理。

抢课测试

  目前还是叫抢课测试,虽然已经能够实现长时间自动监控抢课,但是功能还可以继续完善,运行效果参考附图片。
  代码部分很简单,唯一比较麻烦的是处理抢课过程中碰到的问题:
    1. 只需要3分时避免抢到5分
    2. 实现抢到5分自动停止抢课
    3. 实现已经抢到4分的情况下避免再抢到2分而超过5分的情况。
    4. 自定义抢到的学分上限
  通过多层判断语句,现在已经基本解决,该部分在代码中看起来有点复杂。
  源码中已经包含了爬虫头和两个课程的表单信息,url、爬虫头、表单信息都需要自己手动查找并填写,其中爬虫头和表单信息需要用js信息转化器转化。

附运行效果图片

运行效果1(使用spyder)

image

运行效果2(抢课成功效果)

image

About

python爬虫——抢课原理

https://leesunbowen.github.io

License:GNU General Public License v3.0


Languages

Language:Python 100.0%