V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zyqf
V2EX  ›  Python

写了一个方正教务系统的爬虫,踩了一些坑。

  •  
  •   zyqf · 2018-03-11 23:41:02 +08:00 · 11162 次点击
    这是一个创建于 2231 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一些信息没有打码,请不要喷我。

    教务系统网站: http://211.83.241.81/jwglxt/xtgl/login_slogin.html

    感谢 https://www.v2ex.com/t/433971#reply11 几位经验丰富前辈的指点,才让我少走了些弯路。

    有一些坑,主要是 Cookie 会话保持,以及密钥与时间参数的关系等等。

    代码写的较丑,就不敢开源了。。。。

    第 1 条附言  ·  2018-03-12 08:00:41 +08:00
    方正 => 正方
    第 2 条附言  ·  2018-03-12 18:24:11 +08:00
    开源地址: https://github.com/zyqf/openSwunEduCrawler.git

    README 稍候补上
    65 条回复    2018-03-13 21:57:52 +08:00
    watzds
        1
    watzds  
       2018-03-11 23:45:31 +08:00 via Android
    表格不错
    zyqf
        2
    zyqf  
    OP
       2018-03-11 23:56:24 +08:00 via Android   ❤️ 1
    @watzds 表格是用的 Texttable,IDE 中输出会导致表格错乱。后来调试半天,才去看了源代码,发现应该是全角和半角中文宽度计算的问题。
    scnace
        3
    scnace  
       2018-03-12 00:10:34 +08:00 via Android   ❤️ 1
    之前年轻的时候写过一篇很中二的文章 233

    https://blog.scnace.me/一次爬方正教务处的成功实践 /
    zyqf
        4
    zyqf  
    OP
       2018-03-12 00:15:48 +08:00 via Android
    @scnace 我们教务处正在从您这篇文章的版本迁移到新的版本,据说是 Java 写的。还有 2017 年,今年 2018,年轻的时候???? 黑人问号.jpg
    scnace
        5
    scnace  
       2018-03-12 00:16:54 +08:00 via Android
    @zyqf 是啊 工作一年感觉老了很多啊
    epkT6QJ3RSaz6AnJ
        6
    epkT6QJ3RSaz6AnJ  
       2018-03-12 00:19:57 +08:00
    我记得正方教务有个提权漏洞,之后上传 ashx 后就有了 webshell,可以脱裤
    epkT6QJ3RSaz6AnJ
        7
    epkT6QJ3RSaz6AnJ  
       2018-03-12 00:20:28 +08:00
    表名都是拼音吓尿
    XIVN1987
        8
    XIVN1987  
       2018-03-12 00:53:30 +08:00
    界面挺漂亮,,赞
    chinvo
        9
    chinvo  
       2018-03-12 01:06:47 +08:00
    @zyqf #4 朋友之前在正方做项目实施经理,旧版的写的真是稀烂,在浪潮的云平台上,开 32 虚拟核机器,选课时有个后台进程会频繁挂起,最后解决方案是开 64 虚拟核的机器

    (虽然很大原因是浪潮云平台之前不能绑定虚拟核到物理核
    kingcos
        10
    kingcos  
       2018-03-12 01:12:20 +08:00 via iPhone
    ……问一下,正方的课表难道不是跟青果一样,绘制的图片吗……
    青果的还故意加了躁点防 OCR …
    azh7138m
        11
    azh7138m  
       2018-03-12 01:13:47 +08:00 via Android
    @zyqf 刚迁到新版 Java 的话,那你要抓住机会,看下图片请求如果是学号做参数的话,是没有做校验的,建议爬取学校妹子多的院
    azh7138m
        12
    azh7138m  
       2018-03-12 01:17:12 +08:00 via Android
    顺便说下,如果学校的图书是老汇文的话,是可以直接 getshell,里面会有性别和学号,配合一下就能:D
    oswuhan
        13
    oswuhan  
       2018-03-12 02:46:48 +08:00
    半个校友……这个正方系统看起来好高端……
    tsui
        14
    tsui  
       2018-03-12 04:05:58 +08:00
    主贴就一个 terminal 截屏啊。。你们都看到的什么界面 table 的。。
    steveway
        15
    steveway  
       2018-03-12 07:15:15 +08:00 via Android
    我也做过相关的 不过我更偏向于抢课 post 的发送
    项目中的 cookies 是怎么保存的?
    zyqf
        16
    zyqf  
    OP
       2018-03-12 07:59:46 +08:00 via Android
    @azh7138m 已经做了权限控制,我第一件事情就是干这个。。。
    zyqf
        17
    zyqf  
    OP
       2018-03-12 08:02:29 +08:00 via Android
    @steveway requests.session(),自动管理 Cookies
    zyqf
        18
    zyqf  
    OP
       2018-03-12 08:03:20 +08:00 via Android
    @steveway 再回复下,只要登陆进去,选课,查成绩都能做。
    zyqf
        19
    zyqf  
    OP
       2018-03-12 08:04:22 +08:00 via Android
    @chinvo 难怪旧版的教务系统,一到选课的时候就崩了。
    jydeng
        20
    jydeng  
       2018-03-12 08:10:04 +08:00
    @epkT6QJ3RSaz6AnJ 似乎是 12 年时候的事情
    mcdona1d
        21
    mcdona1d  
       2018-03-12 08:15:08 +08:00 via iPhone
    我拿着个做的毕设,其中一个功能就是能从微信上查课表,查成绩,哈哈,我们系统只能校园网访问
    zyqf
        22
    zyqf  
    OP
       2018-03-12 08:17:06 +08:00 via Android
    @kingcos 新版教务系统是 XHR 请求数据的,返回来的结果都是 JSON 数据,没图片呀。。。
    xyxc0673
        23
    xyxc0673  
       2018-03-12 08:28:26 +08:00 via iPhone
    表示也做了这个新版教务系统的爬虫,登录部分的加密用 python 实现了。不过正方无论旧版新版,人多都会挂掉。
    steveway
        24
    steveway  
       2018-03-12 08:31:56 +08:00
    @zyqf #18 哦哦 可能是需求不同 我希望将 cookie 储存下来多次使用 目前使用的方法是 pickle 将 cookie 对象直接存储下来
    linpf
        25
    linpf  
       2018-03-12 08:40:01 +08:00
    想想我在大学的时候用易语言去爬正方……
    fiht
        26
    fiht  
       2018-03-12 08:49:40 +08:00
    @chinvo 学校不缺机器,缺能把机器利用起来的代码...性能差一点不要紧,我们用设备来补
    kingcos
        27
    kingcos  
       2018-03-12 09:01:41 +08:00 via iPhone
    @zyqfu emmm …青果的事返回的是绘制的图…而且加了躁点…
    xuanyuanaosheng
        28
    xuanyuanaosheng  
       2018-03-12 09:08:25 +08:00 via Android
    方正下一个煎蛋
    Allianzcortex
        29
    Allianzcortex  
       2018-03-12 09:13:08 +08:00
    也写过类似的,不过我校教务系统选课是直接在 js 里把课表写进去的,根本没有 json 这种东西...

    并且它的登陆逻辑是有问题的,填完一次验证码后就能多次尝试登陆,按照大多数人的习惯,如果还是六位数密码,那么最多跑 10**6 次就肯定能破出密码来
    mikii
        30
    mikii  
       2018-03-12 09:21:27 +08:00
    @kingcos 正方是直接输出文字不是绘制图片
    Allianzcortex
        31
    Allianzcortex  
       2018-03-12 09:21:39 +08:00
    突然感觉年轻真好啊...自己都苍老了好多了
    kingcos
        32
    kingcos  
       2018-03-12 09:29:59 +08:00 via iPhone
    @mikii 那就非常简单了……
    xyxc0673
        33
    xyxc0673  
       2018-03-12 09:42:53 +08:00 via iPhone
    @kingcos 新版的直接是 json 数据了,一下子减少了很多代码量
    kingcos
        34
    kingcos  
       2018-03-12 09:46:18 +08:00 via iPhone
    @xyxc0673 是啊,哪跟傻 13 青果…竟然是绘图…还故意加躁点干扰……自己出的 App 也用不成…真的渣
    echoZero
        35
    echoZero  
       2018-03-12 09:48:46 +08:00 via iPhone
    emmmm 我毕业设计里面有部分,学生课表的获取就模拟登录方正教务系统,我当时用过的解析 html 的的方式
    CEBBCAT
        36
    CEBBCAT  
       2018-03-12 09:51:18 +08:00
    相当 Nice 了,俺们学校用的也是这一版本的, 感谢则个 (好像" 则个 "用的不标准)
    CEBBCAT
        37
    CEBBCAT  
       2018-03-12 09:56:10 +08:00
    很期待楼主的开源
    vtwoextb
        38
    vtwoextb  
       2018-03-12 10:05:56 +08:00
    如果遇到封 ip 可以使用代理 或者重启路由器 https://github.com/hizdm/dynamic_ip
    zyqf
        39
    zyqf  
    OP
       2018-03-12 10:22:55 +08:00 via Android   ❤️ 1
    @CEBBCAT 不仅仅是开源,还会写文章遇到的问题以及如何解决的,对一些代码进行说明。
    zyqf
        40
    zyqf  
    OP
       2018-03-12 10:34:19 +08:00 via Android
    @steveway requests 库中也有相关方法保存与载入 Cookies 的,不需要把整个对象持久化。您可以查阅下官方文档。
    wangjie
        41
    wangjie  
       2018-03-12 10:43:20 +08:00 via Android
    最坑的应该是抢课吧,写过验证码识别和抢课的
    dangyuluo
        42
    dangyuluo  
       2018-03-12 11:02:03 +08:00
    这个系统的 Windows 客户端登陆验证是把密码发到本地验证,而不是在服务器上,你敢信?
    jdkl
        43
    jdkl  
       2018-03-12 11:15:31 +08:00
    同希望楼主开源,与楼主同教务系统,因对 JS 不懂所以不了解密码的加密方式一直模拟登录不了,只能依靠 cookies.
    zyqf
        44
    zyqf  
    OP
       2018-03-12 11:23:38 +08:00 via Android
    @jdkl 好的呢,晚上整理下代码就发出来。
    octobersnow
        45
    octobersnow  
       2018-03-12 12:53:29 +08:00 via iPhone
    我们学校教育系统不能直接登录,需要通过信息门户进入教务系统
    iyaozhen
        46
    iyaozhen  
       2018-03-12 13:05:48 +08:00
    哎,教务系统每一年都要被新人艹一遍。那是逝去的青春呀
    axu0411
        47
    axu0411  
       2018-03-12 13:23:15 +08:00 via Android
    作为渣渣的我 也有一个抢课的文章
    https://axu0411.github.io/2017/09/16/ZhengFang-qiangke/
    大佬们不要喷我
    Osk
        48
    Osk  
       2018-03-12 13:25:45 +08:00 via Android
    我们学校教务系统在公网 ip 上,明文传输密码,2333
    whoami9894
        49
    whoami9894  
       2018-03-12 13:28:46 +08:00
    同教务系统,楼主能发下处理 rsa 加密那段代码吗
    ixiaofeng
        50
    ixiaofeng  
       2018-03-12 14:02:55 +08:00
    @chinvo 我来了。。。。。。
    Sanko
        51
    Sanko  
       2018-03-12 14:13:09 +08:00 via Android
    我们有验证码
    Wysten
        52
    Wysten  
       2018-03-12 14:14:21 +08:00
    想起了我们学校正方教务系统里满满的后门。。基本都是上传 ashx 拿到的 webshell
    chinvo
        53
    chinvo  
       2018-03-12 14:52:06 +08:00
    @ixiaofeng #50 emmmmmm
    zyqf
        54
    zyqf  
    OP
       2018-03-12 15:26:38 +08:00 via Android
    @whoami9894 晚上就整理发出来
    mamian
        55
    mamian  
       2018-03-12 16:13:17 +08:00
    每年都有几个搞学校爬虫的
    ChangHaoWei
        56
    ChangHaoWei  
       2018-03-12 16:56:55 +08:00
    把这个弄到 ios 上的日历上去吧。。这个算有点用了
    wysnylc
        57
    wysnylc  
       2018-03-12 17:35:59 +08:00
    xxl-crawle 面向对象爬虫框架
    kokutou
        58
    kokutou  
       2018-03-12 17:52:56 +08:00 via Android
    当年是青果。。。
    早期是 html,后来换图片了,但是更简单了。。。
    labulaka
        59
    labulaka  
       2018-03-12 20:45:55 +08:00
    我们学校有验证码 哈哈哈哈哈哈
    zyqf
        60
    zyqf  
    OP
       2018-03-12 21:55:11 +08:00 via Android
    @labulaka 验证码自己手动输入就好了
    welkinzh
        61
    welkinzh  
       2018-03-12 22:23:04 +08:00
    以前写过爬正方教务系统成绩的,后来发现登录进去首页右下角就有成绩了 23333
    CEBBCAT
        62
    CEBBCAT  
       2018-03-13 15:08:37 +08:00
    @labulaka #59
    @zyqf #60
    这一版本的验证码不是必填项,至少我们学校的是这样,post 字段留空即可
    whoami9894
        63
    whoami9894  
       2018-03-13 19:41:14 +08:00 via Android
    老哥代码整理好了吗
    zyqf
        64
    zyqf  
    OP
       2018-03-13 19:42:27 +08:00
    @whoami9894 看最新 APPEND 的内容呀
    whoami9894
        65
    whoami9894  
       2018-03-13 21:57:52 +08:00 via Android
    @zyqf 哦哦看到了谢谢老哥
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1029 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 18:48 · PVG 02:48 · LAX 11:48 · JFK 14:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.