南航课表爬取与展示

2022-05-17 19:01:32 浏览数 (1)

由于学校网站登录对于移动端来说实在不友好,因而本人决定能做一个爬取自己课表的网站,且对于移动端友好的网站。但是由于本人水平不够,因而本人花了几个礼拜学习了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中的设置:

  1. ALLOWED_HOSTS = []这行中需要添加你的host地址,比如ALLOWED_HOSTS = ['kb.ijackyu.com']
  2. 在正式部署后当你把将debug改成False后,静态文件会出现问题,你需要对settings.py中的静态文件项配置。
代码语言:javascript复制
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]

目前存在问题

  • 使用服务器部署项目后,无法多用户同时登录;
  • 每次登录都会爬取内容,效率低下。

0 人点赞