由于学校网站登录对于移动端来说实在不友好,因而本人决定能做一个爬取自己课表的网站,且对于移动端友好的网站。但是由于本人水平不够,因而本人花了几个礼拜学习了python爬虫和Django框架,做了一个简易的爬取课表的网站。
项目开源地址
https://github.com/jackyu0915/nuaaTimetableWeb
界面预览
关于本项目
环境要求
要使用本项目你需要下述python库(没写版本默认最新版本):
- Django == 2.2.11
- baidu-aip== 2.2.18.0
- requests
- bs4
- lxml
- pytz
- Pillow
验证码识别
本项目使用百度文字识别api识别验证码,因而,如果你希望使用的话,请在百度ai开放平台申请,在timetable文件夹下面的views.py中填写你的应用的AppID、API Key、Secret Key,如下所示。
代码语言:javascript复制
def img_to_str1(image_path):
# 百度文字基本识别设置
config = {
'appId': 'AppID',
'apiKey': 'API Key',
'secretKey': 'Secret Key'
}
client = AipOcr(**config)
image = get_file_content(image_path)
options = {}
# 设置语言为英文
options["language_type"] = "ENG"
result = client.basicGeneral(image, options)
if 'words_result' in result:
return 'n'.join([w['words'] for w in result['words_result']])
上面所示的是百度文字识别的基础接口,识别成功率有待提高,但是每天能免费调用50000次。而我最终使用的是高精度版,每天可以免费试用500次。因而你需要调用img_to_str()这个函数,其实就是在上面的result一行做修改就好了,改成下面的代码:
代码语言:javascript复制result = client.basicAccurate(image, options)
服务器部署注意事项
服务器部署django时需要改变settings.py中的设置:
- ALLOWED_HOSTS = []这行中需要添加你的host地址,比如
ALLOWED_HOSTS = ['kb.ijackyu.com']
- 在正式部署后当你把将debug改成False后,静态文件会出现问题,你需要对settings.py中的静态文件项配置。
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'collectedstatic') #将debug改成False后,静态文件目录
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
然后在urls.py文件中添加如下代码:
代码语言:javascript复制from django.views import static
from django.conf import settings
from django.conf.urls import url
urlpatterns = [
url(r'^static/(?P<path>.*)$', static.serve, {'document_root': settings.STATIC_ROOT }, name='static'),#注意这里只能使用url方法,不能使用path方法
]
最后,在目录目录下新建collectstatic文件后执行命令收集静态文件
代码语言:javascript复制python manage.py collectstatic
参考:django 将Debug设为False无法加载静态文件[1]
参考项目
NUAA_ClassSchedule[2]Timetable[3]
目前存在问题
- 使用服务器部署项目后,无法多用户同时登录;
- 每次登录都会爬取内容,效率低下。