개인 프로젝트/간단한 프로젝트

[개인프로젝트] 수원시 공고알림 크롤링 및 메일링 프로그램 제작

에버듀 2024. 2. 10. 12:33
반응형

수원시 공고 사이트에서 원하는 정보가 새로 올라왔을 때, 해당 정보를 메일로 받는 프로그램을 제작해보았다.

 

https://www.suwon.go.kr/web/saeallOfr/BD_ofrList.do?q_currPage=1&q_sortName=&q_sortOrder=&q_rowPerPage=&q_searchKey=SJ&q_searchVal=

 

공고/고시/입법예고 : HOME > 수원소식 > 공고/고시/입법예고

8792 수원시 장안구 파장동 공고 제2024-13호 주민등록신고 미이행자에 대한 최고공고 파장동 2024-02-08 2024-02-08 ~ 2024-02-26 24 8791 수원시 영통구 공고 제2024-75호 2024년 경로당 활성화 문화교실 강사모

www.suwon.go.kr

 

크롤링, 메일링 모두 파이썬으로 작업했고, 정기적으로 크롤링하고 메일링하는 작업은 개인 서버에 crontab 으로 등록해두었다.

 

import requests
import smtplib
from bs4 import BeautifulSoup
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


response = requests.get("https://www.suwon.go.kr/web/saeallOfr/BD_ofrList.do?q_currPage=1&q_sortName=&q_sortOrder=&q_rowPerPage=20&q_searchKey=SJ&q_searchVal=%EB%B6%84%EC%96%91")
html = response.text

soup = BeautifulSoup(html, 'html.parser')
results = soup.select('.p-table > tbody > tr')
send_msg = ""
number = 1
for result in results:
    title = result.select_one('.p-subject').text.strip()
    link = result.select_one('.p-subject > a')['href']
    date = result.select('td')[4].text.strip()

    send_msg += f"{number}. {title}"
    send_msg += '\n'
    send_msg += f"https://www.suwon.go.kr/web/saeallOfr/{link}"
    send_msg += '\n'
    send_msg += date
    send_msg += '\n\n'

    number += 1

gmail_smtp = "smtp.gmail.com"
gmail_port = 465
smtp = smtplib.SMTP_SSL(gmail_smtp, gmail_port)

my_account = "이메일"
my_password = "앱 비밀번호"
smtp.login(my_account, my_password)

to_mail = "전송할 이메일"

msg = MIMEMultipart()
msg["Subject"] = "수원시청 분양 공고 메일 현황 전송"
msg["From"] = my_account
msg["To"] = to_mail

content = send_msg
content_part = MIMEText(content, "plain")
msg.attach(content_part)

smtp.sendmail(my_account, to_mail, msg.as_string())
smtp.close()

 

위와 같이 간단히 작성하였다.

 

 

이렇게 메일이 온다.

 

crontab 을 이용해 파이썬 프로그램을 실행시키는 스크립트를 매 정시마다 실행시키도록 하였다.

 

반응형