Gxust科大校园核心功能

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提取信息。

就这么多先,其他也没有什么高级知识。总的来说就是一个爬虫程序,只是怎么解决旧教务系统需要内网才能进行爬虫的而已。核心技术就是这样,要想弄的高级的东西就是要自己有想法,然后用程序实现而已。如果本教程有什么不对的话请原谅,毕竟本人学到的东西还是很少的。😭