Skip to content

DU Notice Bot Wiki

hongtae1234 edited this page May 28, 2024 · 6 revisions

대구대학교 공지사항 스크래핑 스크립트


개요

이 문서는 대구대학교 웹사이트에서 공지사항을 스크래핑하는 Python 스크립트에 대한 설명입니다.
이 스크립트는 Selenium을 사용하여 특정 날짜(오늘)의 공지사항을 추출하여 제목과 링크를 리스트로 반환합니다.

요구 사항

이 스크립트를 실행하기 위해서는 아래와 같은 Python 패키지가 필요합니다:

selenium webdriver-manager

설치 방법

sh Download 코드 복사 pip install selenium webdriver-manager 코드 설명

1. 라이브러리 임포트

필요한 라이브러리를 임포트합니다.

python Download 코드 복사

import datetime 
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

2. 함수 정의

대구대학교 공지사항을 스크래핑하는 함수 get_today_notices를 정의합니다.

python Download 코드 복사

def get_today_notices():
    # 현재 날짜를 'YYYY-MM-DD' 형식으로 가져옵니다.
    today = datetime.date.today().strftime("%Y-%m-%d")
    
    # 대구대학교 공지사항 웹페이지의 URL
    url = 'https://www.daegu.ac.kr/article/DG159/list?pageIndex=1&'
    # 해당 URL에서 HTML 페이지를 가져옵니다.
    response = requests.get(url)
    # BeautifulSoup 객체를 생성하여 HTML을 파싱합니다.
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 오늘 날짜에 해당하는 공지사항을 저장할 리스트
    today_notices = []
    
    # 공지사항 목록을 선택합니다.
    notice_elements = soup.select('#sub_contents > div > table > tbody > tr')

    # 공지사항 각각에 대하여 반복합니다.
    for idx, element in enumerate(notice_elements, start=1):
        # 처음 12개는 무시합니다 (헤더나 기타 부분일 수 있음)
        if idx <= 12:
            continue
        # 제목 요소를 선택합니다.
        title_element = element.select_one('td.list_left > a')
        # 날짜 요소를 선택합니다.
        date_element = element.select_one('td:nth-child(5)')
        # 제목 텍스트를 정리합니다.
        title = title_element.text.strip()
        title = re.sub(r'[\n\t\r]+', ' ', title)
        # 날짜 텍스트를 정리합니다.
        date = date_intext.strip()
        # 자바스크립트 onclick 속성에서 고유 번호를 추출합니다.
        onclick = title_element.get('onclick', "")
        onclick_number = re.sub(r'[^0-9]', '', onclick)
        # 공지사항 상세 페이지 링크를 생성합니다.
        link = f"https://www.daegu.ac.kr/article/DG159/detail/{onclick_number}"

        # 공지사항의 날짜가 오늘 날짜와 같은 경우만 리스트에 추가합니다.
        if today == date:
            notice_text = f"{title} - {link}"
            summary = get_summary(notice_text)
            today_notices.append({'date': date, 'title': title, 'link': link, 'summary': summary})
    
    # 최신 공지사항부터 보이도록 리스트를 뒤집습니다.
    today_notices.reverse()
    return today_notices

3. 함수 실행 및 결과 출력

함수를 실행하여 오늘 날짜의 공지사항을 가져오고, 그 결과를 출력합니다.

python Download 코드 복사

모든 공지사항 가져오기

notices = get_today_notices()

결과 출력

for notice in notices:
    print(notice) 

Important

동작 방식

  • Chrome 드라이버 설정: webdriver.Chrome을 사용하여 Chrome 브라우저를 엽니다.
  • 오늘 날짜 설정: datetime.date.today()를 사용하여 오늘 날짜를 문자열 형식으로 저장합니다.
  • 웹 페이지 열기: driver.get을 사용하여 대구대학교 공지사항 페이지를 엽니다.
  • 공지사항 요소 가져오기: find_elements를 사용하여 모든 공지사항 요소를 가져옵니다.

Tip

공지사항 추출

  • 각 공지사항 요소에서 제목과 링크를 추출합니다.
  • 공지사항의 날짜가 오늘 날짜와 일치하는지 확인합니다.
  • 일치하는 공지사항을 리스트에 추가합니다.
  • 브라우저 닫기: driver.quit을 사용하여 브라우저를 닫습니다.
  • 결과 반환: 오늘 날짜의 공지사항을 리스트 형태로 반환합니다.

Caution

주의 사항

  • 이 스크립트는 대구대학교 공지사항 페이지의 구조가 변경될 경우 동작하지 않을 수 있습니다. 페이지 구조가 변경되면 CSS_SELECTOR를 수정해야 합니다.
  • 크롬 드라이버가 설치되어 있어야 하며, webdriver-manager 패키지를 사용하여 자동으로 설치할 수 있습니다.
  • 이 문서를 통해 대구대학교 공지사항 스크래핑 스크립트의 사용법과 동작 방식을 이해할 수 있습니다. 스크립트의 수정이나 확장이 필요할 경우, 위의 설명을 참고하여 적절히 수정하세요.