-
🚀스케쥴 라이브러리를 이용한 크롤링(첨부)파일 자동전송 🚀파이썬 2021. 11. 4. 02:04728x90

💢크롤링한 파일 스케쥴링을 통한 자동화메일 발송
➰대략적 흐름
1.파일 크롤링-> 2. dataset폴더에 저장 -> 3. 저장된 첨부파일 자동메일발송 구현 -> 4. 원하는 시간에 작동할 수 있도록 scheduler 사용
대부분의 설명등을 코드 안에 주석안에 되어있음을 참고하시기 바랍니다.
➰크롤링 코드
import csv, requests import pandas as pd import time def covid_crawling(): # 날짜/지역/확진자누적/사망자누적/격리해제누적 CSV_URL = 'http://raw.githubusercontent.com/jooeungen/coronaboard_kr/master/kr_regional_daily.csv' # 확진, 사망, 격리해제 yesterday_data = {} yesterday_data['서울'] = [0, 0, 0] yesterday_data['부산'] = [0, 0, 0] yesterday_data['대구'] = [0, 0, 0] yesterday_data['인천'] = [0, 0, 0] yesterday_data['광주'] = [0, 0, 0] yesterday_data['대전'] = [0, 0, 0] yesterday_data['울산'] = [0, 0, 0] yesterday_data['세종'] = [0, 0, 0] yesterday_data['경기'] = [0, 0, 0] yesterday_data['강원'] = [0, 0, 0] yesterday_data['충북'] = [0, 0, 0] yesterday_data['충남'] = [0, 0, 0] yesterday_data['전북'] = [0, 0, 0] yesterday_data['전남'] = [0, 0, 0] yesterday_data['경북'] = [0, 0, 0] yesterday_data['경남'] = [0, 0, 0] yesterday_data['제주'] = [0, 0, 0] yesterday_data['검역'] = [0, 0, 0] flag = False csv_data = [] with requests.Session() as s: download = s.get(CSV_URL) decoded_content = download.content.decode('utf-8') cr = csv.reader(decoded_content.splitlines(), delimiter=',') my_list = list(cr) for row in my_list: if row[0] == 'date': continue # 다음부터 과거 데이터의 차이만 다시 저장 row[2] = int(row[2]) - int(yesterday_data[row[1]][0]) row[3] = int(row[3]) - int(yesterday_data[row[1]][1]) row[4] = int(row[4]) - int(yesterday_data[row[1]][2]) # 누적 데이터 저장 yesterday_data[row[1]][0] += row[2] yesterday_data[row[1]][1] += row[3] yesterday_data[row[1]][2] += row[4] csv_data.append(row) df = pd.DataFrame(csv_data) # file_date = time.strftime('%Y-%m-%d', time.localtime(time.time())) # file_name = 'C:/02.ElasticStack/0.dataset/covid19_ko_' + time.strftime('%Y-%m-%d', time.localtime(time.time())) + '.csv' file_name = 'C:/02.ElasticStack/0.dataset/covid19_ko_' + file_date + '.csv' df.to_csv(file_name, index=False, header=False, encoding='utf8') return file_date➰자동 첨부파일 메일전송화
from email.mime.base import MIMEBase from email.mime.multipart import MIMEMultipart import smtplib from email.mime.text import MIMEText import time from email import encoders def send_mail(): # id = input('메일을 보낼 계정을 입력해 주세요: ') # password = input('계정 비밀번호를 입력해 주세요: ') # 메일 내용을 담을 문자열을 선언합니다. text = f'{"크롤링한 파일입니다."}' # smtp 인스턴스를 만들어줍니다. # 인자값으로는 smtp 서버 url과 port가 들어갑니다. # 해당 메일 계정에서 smtp 설정 필요 # smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp = smtplib.SMTP('smtp.naver.com', 587) # 초기에 서버와 handshaking 을 시도합니다. smtp.ehlo() # TLS를 이용해서 암호화할 것이므로 start tls 함수를 호출합니다. smtp.starttls() # smtp 서버 로그인을 위해 id 와 password를 인자로 하여 login 함수를 호출합니다. # id는 @가 들어간 email형식으로 입력합니다. # smtp.login(id, password) smtp.login('wlaud5314@naver.com', 'wlaud!!5314') # MIMEText 인스턴스에는 보내려는 메일 내용을 인자값으로 넣어줍니다. message = MIMEMultipart() # 메일 제목은 Subject, 보내는 사람은 From, 받을 사람 정보는 To로 설정합니다. message['Subject'] = "최신정보입니다." message['From'] = "wlaud5314@naver.com" message['To'] = "wlaud5314@naver.com" message.attach(MIMEText('오늘자 covid19 데이터가 크롤링 되었습니다.', 'plain')) # smtp sendmail 함수를 이용하여 실제로 메일을 발송해줍니다. # smtp.sendmail(message['From'], message['To'].split(','), message.as_string()) file_name = 'covid19_ko_' + time.strftime('%Y-%m-%d', time.localtime(time.time())) + '.csv' file_date = time.strftime('%Y-%m-%d', time.localtime(time.time())) # file_name = 'C:/02.ElasticStack/0.dataset/covid19_ko_' + time.strftime('%Y-%m-%d', time.localtime(time.time())) + '.csv' path = 'C:/02.ElasticStack/0.dataset/covid19_ko_' + file_date + '.csv' attachment = open(path, 'rb') part = MIMEBase('application', 'octet-stream') part.set_payload((attachment).read()) encoders.encode_base64(part) part.add_header('Content-Disposition', "attachment; filename=" + file_name) message.attach(part) smtp.sendmail('wlaud5314@naver.com', 'wlaud5314@naver.com', message.as_string()) # smtp quit 함수로 인스턴스를 종료시킵니다. smtp.quit() print('발송 완료')➰자동메일 스케쥴화
import schedule import time from covid19_crawling import covid_crawling as covid from automail import send_mail def covid_schedule(): file_date = covid() subject = f'covid19-{file_date} 크롤링 완료' send_mail() print('covid_schedule 동작완료') # 매일 8시 스케줄 등록 schedule.every().day.at("08:00").do(covid_schedule) # 스케줄 테스트용 (10초 마다 스케줄 실행) # schedule.every(10).seconds.do(covid_schedule) if __name__ == '__main__': while True: schedule.run_pending() time.sleep(1)'파이썬' 카테고리의 다른 글
💢유용한 라이브러리 모음 (0) 2021.10.28 [python]🔑이진탐색 알고리즘 (0) 2021.10.24 [python]정렬 알고리즘 (0) 2021.10.23 [python] Regular Expression(정규표현식) #Step2 (0) 2021.10.23 [python] Regular Expression(정규표현식) #Step1 (0) 2021.10.23