Gxust科大校园后端工作原理

如上图所示,整个程序的后端其实就是一个爬虫。
可能旧教务系统会有所区别,因为旧教务系统是内网的,如果直接访问是不可以的。作者的思路就是在服务器端利用easyconnect搭建一个服务,这样就能使服务器访问旧教务系统了。
1.docker-easyconnect(请务懂一些Linux知识和docker容器)
解释一下:作者一开始的想法是服务器搭建一个easyconnect就行了(因为服务器也只能安装一个easyconnect程序),但后来想了只有一个easyconnect程序的话,就不能满足用户想自己创建easyconnect的要求。 其实最好的方法就是把easyconnect程序容器化,就是docker容器这种。easyconnect程序容器化后,服务器想创建easyconnect程序,就创建一个docker容器就行了,方便管理,而且也不会影响服务器。
当时我非常幸运,刚好发现Github上有个大佬实现了这个Github链接。以前的这个大佬也只实现了socks5代理,现在加了http代理。如果想看懂这个大佬的文档还是有点难度的,他现在改的教程分的很散,这里一点那里一点的,其实可以不用看懂他的,因为等下我会讲怎么用的。
测试环境:Ubuntu 18.04LTS
(1)有三种方法在服务器上安装docker-easyconnect (对了前提你的服务器要安装好docker,最好可以简单学习一下docker的用法)
如果你们看过Github的教程,就知道docker-easyconnect有几个版本,但我们这里都是用cli版本(命令行版本),其他版本都不太符合我们的需求
一、方法一

解压出来

在目录里面调用终端,输入下面命令
docker image build -f Dockerfile.fake-hwaddr -t fake-hwaddr . docker image build --tag hagb/docker-easyconnect:cli -f Dockerfile.cli .
二、方法二
直接终端输入
git clone https://github.com/hagb/docker-easyconnect.git cd docker-easyconnect docker image build -f Dockerfile.fake-hwaddr -t fake-hwaddr . docker image build --tag hagb/docker-easyconnect:cli -f Dockerfile.cli .
三、方法三(推荐)
直接终端输入
docker pull hagb/docker-easyconnect:cli
安装完成后,可以测试一下
这里有两个命令启动容器,第一个是现在Github提供的命令,第二个是以前的。
第一个:
直接终端输入
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -p 127.0.0.1:1080:1080 -e EC_VER=7.6.3 -e MAX_RETRY=1 -e EXIT=1 -e CLI_OPTS="-d https://vpn.gxust.edu.cn:5566 -u username -p passwd" hagb/docker-easyconnect:cli
需要把命令里面的username替换成你的一卡通账号,passwd是密码
第二个(最新的教程里面的,其实都差不多):
直接终端输入
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 -e EC_VER=7.6.3 -e CLI_OPTS="-d https://vpn.gxust.edu.cn:5566 -u username -p passwd" hagb/docker-easyconnect:cli
需要把命令里面的username替换成你的一卡通账号,passwd是密码
正常的话就是这样

打开火狐(其他的不是很熟),进入设置,点击网络设置



解释一下启动容器命令里面的一些参数的意思


这样就可以通过命令行的方式创建一个docker容器开启easyconnect服务,然后再通过其他手段,进行socks5代理转成HTTP,通过爬虫手段获取旧教务系统的数据。
2.socks5代理转成HTTP
这里只用python3演示,其他语言自行查找解决办法
第一种办法(全局配置):
import socket import socks socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 1080) socket.socket = socks.socksocket
作者第一次就是用这个,因为当时不是很懂这些东西。
主要是这个方法有弊端的,因为全局配置了,一旦有不需要代理访问的就会报错
第二种方法(局部):
requests.post('http://172.16.129.117/',proxies={'http': 'socks5://127.0.0.1:1080'})
这个只是局部而已,只要在需要的地方这样写就行了,非常方便
最终我们就可以利用python的爬虫进行爬取旧教务系统的数据了
零散知识
因为旧教务系统的数据是直接写在html里面的,所以要通过其他手段提取自己想要的信息。
python有个BeautifulSoup库,可以很好的解决html提取信息。