티스토리 뷰

학교 공지 사항 자동화를 해보자 - 3

Intro. 사업단 공지 데이터 추출을 해보자


앞선 학과 공지와 같이 리스트 형태로 공지를 뿌리고 있음을 확인 할 수 있다. 보다보니 게시판 형태라 이런 패턴으로 데이터를 뿌리는 것은 당연하다

역시나 개발자 도구를 켜서 CSS 셀렉터를 추출해서, 리스트의 위치를 특정해야 한다

html 코드를 보니 역시나 tr로 뿌리고 있다. 대신 td 태그 내의 내용물이 조금씩 다르다
학과 공지 사항에서 데이터를 추출한 것과 비슷한 맥락으로 코드를 짜면 될거 같다

코드

import requests
import re
from bs4 import BeautifulSoup
from datetime import datetime
url = 'https://www.sojoong.kr/www/notice/'
today = str(datetime.now().date()).replace("-",".")

def getTodayJnuSW():
    post = []
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    t = soup.findAll('td',attrs={"class":"alignLeft"})

    for tr in soup.findAll('td',attrs={"class":"alignLeft"}):
        date = tr.find('em').text
        title = tr.find('strong').text
        href = re.search(r'<a\s.*?href=[\'"]?([^\'" >]+)',str(tr)).group(1)
        postNumber= re.compile("[0-9]{3,5}").search(href).group()
        postUrl = "https://www.sojoong.kr/www/notice/view/"+postNumber
        if date!=today:
            continue
        post.append([title,postUrl])
        print(f"Adding… {date} : {title}")
        return post
  • 앞선 공지와 마찬가지로, 뭉텅이로 된 데이터에서 정규식을 이용하여 데이터를 추출하였다.
    • 하지만, find() 함수를 사용하니 쉽게 태그 별로 데이터를 추출 할 수 있었다
  • 사업단 홈페이지는 게시물마다 번호를 부여해서, 리스트 뷰를 보는 곳에서는 게시물 번호만 알 수 있었다.
    • 그래서, Url을 붙여서 해당 포스트로 이동하도록 하였다.
  • URL을 다루다보면, 암호화 된 URL이 뒤에 붙는 것을 볼 수 있는데, 그냥 날려도 상관 없다.

레퍼런스

728x90