Stargazer

[파이썬] 기숙사 급식표 다운로드 프로그램 만들기 본문

프로그래밍/Python

[파이썬] 기숙사 급식표 다운로드 프로그램 만들기

COM2IT 2022. 3. 29. 20:18
반응형

우리학교 기숙사 홈페이지가 새로 바뀌게 되면서

이전에 쓰던 프로그램이 쓸모 없어졌다.

 

사실 이전에도 한번 개정한적 있었는데, 그때는 자바스크립트 형식으로 다운받는 형식이라 웹 스크레이핑 하는 프로그램을 하나의 파일로 만들 방법을 못찾아서 관뒀는데

이번에는 실험해보니 가능해졌다.

 

첨부파일

기숙사급식표(ver.1.2).exe
13.35MB

물론 파이썬으로 만들었기 때문에 모바일에서는 실행이 어려워서 첨부터 컴퓨터용으로 만들었다.

 

덤으로 코드도 올릴테니 참고할 사람은 참고하는것도 좋을 것이다.

코드:

import requests
from bs4 import BeautifulSoup
import os
import datetime

base = "https://dorm.inha.ac.kr"
url = "https://dorm.inha.ac.kr/dorm/10136/subview.do?enc=Zm5jdDF8QEB8JTJGYmJzJTJGZG9ybSUyRjI1MzMlMkZhcnRjbExpc3QuZG8lM0Y%3D"
response = requests.get(url)

if response.status_code == 200:
    # 요청 성공
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    table = soup.select_one('table.artclTable')
    links = table.select('table > tbody> tr> td > a') # 접속링크
    
    #날짜 확인후 접속
    temp=[]
    date=[]
    now = datetime.datetime.now()
    for i in range(2): #최상위 2개 추출
        temp = list(map( int, links[i].text.strip().split('.')[:3]))
        date.append(datetime.datetime(temp[0],temp[1],temp[2], 0,0,0,0)) #데이트 변수로 변환
        
    delta = now - date[0] # 최신꺼와 비교
    
    if delta.days < 0: # 다음주꺼라면
        if now.weekday() == 6 and now.hour >= 7 and now.minute >= 30: #일요일 7:30 분 이후면 다음주
           recent = links[0].attrs['href']
        else:
           recent = links[1].attrs['href'] #아니면 이번주꺼
    else:
        recent = links[0].attrs['href'] #아니면 앞에꺼가 이번주

    #선택 날짜 급식표 보드 접속
    rurl = base + recent
    recent_page = requests.get(rurl)
    board = recent_page.text
    soups = BeautifulSoup(board, 'html.parser')
    files = soups.select('body > div > div.artclItem.viewForm > dl > dd > ul > li > a')
    
    
    #한글 파일 인지 확인
    for file in files:
        if '한글' in file.text:
            filelink = file.attrs['href']
            filename =  file.text.strip()
            break

    # 다운로드 파일 다운로드
    downlink = base + filelink
    file = requests.get(downlink)
    f = open(filename, 'wb')
    for chunk in file.iter_content(100000):
        f.write(chunk)
    f.close()
    
    #파일 실행
    os.startfile(filename)
else :
    print(response.status_code)

(22.3.31 ver.1.1)

영문이랑 한글 순서 바뀌면 영문으로 다운받아지는 현상 수정

다음주 급식표 미리 올라오는 경우 대비하여, 날짜 계산 추가(일요일 19:30 이후부터 다음주 급식표 다운로드)

(22.4.4 ver.1.2)

시간오류 발생으로 인한 저번주 급식표 다운 오류 해소

 

↓공감과 덧글은 큰 힘이 됩니다!

반응형
Comments