-
카카오톡 인천대학교 학식봇 만들기 - 1App 2021. 6. 29. 21:23
학교 학식 메뉴들을 크롤링 해온 후 카카오톡 채팅봇에 적용시켜 관련내용 확인 및 히스토리 저장기능을 기본적으로 가지고 있는 봇을 만들고자한다.
어제부터 시작한 토이프로젝트로, 어제 작성한 코드를 포함하고있다.
사용언어 : Python
사용할 기술 스택들 : AWS, Pycharm
1. 파이썬으로 코딩 후, AWS를 이용해 서버에 올림
2. DynamoDB를 이용한 사용자별 과거 선택한 학식 기록
3. 위의 기능들을 카카오 오픈 빌더의 스킬에 적용시켜 봇 형태로 서비스 제공
첫날에는, 먼저 크롤링 기능을 구현하는 코드를 작성했다.
from bs4 import BeautifulSoup # 크롤링을 위해 bs4 라이브러리 사용 from urllib.request import urlopen from tqdm.notebook import tqdm # 반복문의 진행 상태를 디스플레이해줄 tqdm 라이브러리 사용 menu_list = [] is_Today = False # 학식 메뉴를 제공하는 웹페이지에 게재된 표에서, 당일 메뉴의 td만 클래스명이 다르기 때문에 이용 할 Boolean 변수 for i in tqdm(range(2)): url = "https://www.uicoop.ac.kr/main.php?mkey=2&w=2&l=1" html = urlopen(url) soup = BeautifulSoup(html, "html.parser") # 원하는 태그 정보를 뽑아줄 bs4 인스턴스 생성 for tr_menu in soup.find(id='menuBox').find_all('tr'): # menuBox라는 이름을 가진 테이블에서 한줄씩 뽑아냄 if is_Today is False: # 당일 메뉴와, 이번주 메뉴들을 모두 제공하기위해 클래스명을 조정 menu = tr_menu.find(class_ = 'din_lists') is_Today = True else: menu = tr_menu.find(class_ = 'din_list') if menu: # 찾은 내용이 있을 경우 menu_sub_list = menu.get_text().split('\n') # 한칸에 모든 메뉴가 \n으로 나누어져있음 for i in range(len(menu_sub_list)): if(menu_sub_list[i] is '\r' or # 메뉴가 게재된칸에는 가격정보와 제공시간이 적혀있으므로, 메뉴만 얻기위해 예외처리 menu_sub_list[i][0] is '*' or menu_sub_list[i][0] is '[' or menu_sub_list[i][0] is '(' ): break elif menu_sub_list[i][0] is '<': # <즉석조리기기>칸의 라면 메뉴들을 가져오기위한 예외처리 continue else: if '국밥' in menu_sub_list[i]: # 국밥칸에서 칼로리 정보를 제외하고 메뉴 이름만 가져오기위한 예외처리 print(menu_sub_list[i][:4]) else: print(menu_sub_list[i])
학식 메뉴 테이블 한칸 예시 사진 좌측 사진에서 볼 수 있듯이, \n으로 각각의 메뉴가 나누어져 있다.
하단의 가격 정보와 식사 제공 시간은 쓸모가 없으므로, 모두 예외처리를 해주었다.
완성된 코드는 아니며, 당일 정보만 받아올 수 있는 상태에서 종료했다. 지금은 크롤링이 제대로 되는지 확인하기위해 임시로 print 함수를 이용해 출력했다.
'App' 카테고리의 다른 글
카카오톡 인천대학교 학식봇 만들기(AWS Lambda) - 5 (0) 2021.07.05 카카오톡 인천대학교 학식봇 만들기(크롤링) - 4 (0) 2021.07.02 카카오톡 인천대학교 학식봇 만들기(크롤링) - 3 (0) 2021.07.01 카카오톡 인천대학교 학식봇 만들기 (크롤링)- 2 (0) 2021.06.29 MVVM 아키텍쳐 (0) 2021.02.10