写了一个方正教务系统的爬虫,踩了一些坑。 - V2EX
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 11894 次点击
    这是一个创建于 2770 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    感谢 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     Solana     5547 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 08:53 PVG 16:53 LAX 01:53 JFK 04:53
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86