[GPTs] 단대학식 - 1

2024. 2. 17. 14:19·IT/Project
목차
  1. 주제
  2. 크롤링
  3. Notion과 GPTs연결
  4. 응답예시
  5. 자동화

주제

GPTs로 뭘 만들까 계속 고민하다가
학교학식에 대한 정보를 알려주는 GPTs를 만들어볼까 한다.
흔한 주제인 학교 학식을 외국인 학생들을 위해 영어로 번역 후 제공하는건데
노션 API와 GPTs를 연결해
학교학식에 대한 정보를 노션을 통한 DB로 사용하는 것이다.
흔한 주제인만큼 GPT를 사용해서 낼 수 있는 차별점이 뭘까 계속해서 생각하는중이다.

크롤링

우선 크롤링하는 코드를 만들었다.
학교 홈페이지에서 이번주의 학식 메뉴를 제공해주는데 이것을 가져와 엑셀파일로 저장되게 해놨다.
그리고나서 이걸 노션 데이터베이스에 저장했다.
구글링한 결과 파이썬 코드에서 크롤링 후 바로 노션에 저장할 수 있는 것 같던데
몇차례 시도 후 실패했다. 추후 다시 시도해볼 생각이다.

import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import NoSuchElementException, TimeoutException data = [] # 데이터를 저장할 빈 리스트 생성 chrome_options = Options() chrome_options.add_argument("--headless") # 창 없는 모드 driver = webdriver.Chrome(service=Service( ​​​​ChromeDriverManager().install()), options=chrome_options) try: ​​​​driver.get("https://www.dankook.ac.kr/web/kor/-555") ​​​​rows = WebDriverWait(driver, 10).until( ​​​​​​​​EC.presence_of_all_elements_located( ​​​​​​​​​​​​(By.CSS_SELECTOR, "table.type_food tbody tr")) ​​​​) ​​​​for row in rows: ​​​​​​​​meals_info_html = row.find_element( ​​​​​​​​​​​​By.CSS_SELECTOR, "td:nth-child(2)").get_attribute('innerHTML') ​​​​​​​​soup = BeautifulSoup(meals_info_html, 'html.parser') ​​​​​​​​# 날짜 및 요일 정보 추출 ​​​​​​​​date_info = row.find_element(By.CSS_SELECTOR, "span.name_date").text ​​​​​​​​day_info = row.find_element(By.CSS_SELECTOR, "span.name_week").text ​​​​​​​​# 식사 정보 초기화 ​​​​​​​​meal_data = { ​​​​​​​​​​​​"날짜": date_info, ​​​​​​​​​​​​"요일": day_info, ​​​​​​​​​​​​"조식": "", ​​​​​​​​​​​​"중식": "", ​​​​​​​​​​​​"석식": "", ​​​​​​​​​​​​"기타": "", # 고정된 메시지 할당 ​​​​​​​​​​​​"BHC치킨": "" # 동적으로 할당될 예정 ​​​​​​​​} ​​​​​​​​current_meal = "" ​​​​​​​​for element in soup.contents: ​​​​​​​​​​​​if element.name == "b": # 식사 유형의 시작을 나타냄 ​​​​​​​​​​​​​​​​current_meal = element.text.strip().split(" ")[ ​​​​​​​​​​​​​​​​​​​​0] # 조식, 중식, 석식, 기타 ​​​​​​​​​​​​​​​​if "[미운영]" in element.text: ​​​​​​​​​​​​​​​​​​​​meal_data[current_meal] = "미운영" ​​​​​​​​​​​​elif element.name == "br": ​​​​​​​​​​​​​​​​continue ​​​​​​​​​​​​elif "BHC치킨" in element.text: # "BHC치킨" 정보 처리 ​​​​​​​​​​​​​​​​meal_data["BHC치킨"] = "운영시간: 미운영" # 예시로 "운영시간: 미운영" 할당 ​​​​​​​​​​​​​​​​continue ​​​​​​​​​​​​else: ​​​​​​​​​​​​​​​​# 식사 정보에 따라 적절한 형식으로 데이터 추가 ​​​​​​​​​​​​​​​​if current_meal and element.strip() != "": ​​​​​​​​​​​​​​​​​​​​if meal_data[current_meal] != "미운영": # 식사가 "미운영" 상태가 아닐 때만 추가 ​​​​​​​​​​​​​​​​​​​​​​​​meal_data[current_meal] += (", " + element.strip() ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​) if meal_data[current_meal] else element.strip() ​​​​​​​​# 식사 정보 마지막의 쉼표 제거 ​​​​​​​​for meal in ["조식", "중식", "석식"]: ​​​​​​​​​​​​if meal_data[meal] and meal_data[meal].endswith(", "): ​​​​​​​​​​​​​​​​meal_data[meal] = meal_data[meal][:-2] ​​​​​​​​data.append(meal_data) except TimeoutException: ​​​​print("페이지 로드 시간 초과.") except NoSuchElementException: ​​​​print("요소x") finally: ​​​​driver.quit() # 판다스 데이터프레임으로 변환 df = pd.DataFrame(data) # 엑셀 파일로 저장 excel_filename = "test.xlsx" df.to_excel(excel_filename, index=False) print(f"{excel_filename} 파일저장성공")

Notion과 GPTs연결

이제 노션과 GPTs를 연결해봤다.유튜브를 보고 따라했다.
https://sasshero.atlassian.net/wiki/external/NzNhOTlkYWU4YzI4NDI2M2E4MTE1YTM0ZjQzMTQ1YTI
코드까지 다 제공해주셔서 쉽게할 수 있었다.

응답예시

근데 진짜 아무리 생각해봐도 이 GPTs를 만들면 굳이 이걸 사용 할 이유가 없다.
그냥 웹 페이지를 사용하고 번역기능을 제공하는게 훨씬 이득일텐데
내 GPTs가 가진 장점이 뭐가 있을까..?

자동화

이게 쓸모 있을지 없을지는 모르겠고
우선 서비스 자체를 만들어 보고싶다.
그러기 위해서 자동화에 대해서 생각해보았다.
우선 파이썬 크롤링을 했을때 노션에 데이터베이스 형태로 바로 저장되게 할 생각이다.

또한 Lambda를 사용해 매주 일요일 밤에 크롤링 코드를 실행 할 계획이다.
근데 기억으로는 셀레니움을 사용한 코드가 람다에서 잘 안돌아가던 것 같은데 확인해봐야겠다리

반응형
저작자표시 비영리 변경금지 (새창열림)

'IT > Project' 카테고리의 다른 글

KR_Labs 개발기 1편  (0) 2025.01.01
[GPTs] GPTs 묘지  (0) 2024.02.13
[가구찾아] 쿠팡 크롤링 로그인하기  (0) 2024.02.06
[가구찾아] GPTs 가구찾아주는 서비스 만들기 - 1  (0) 2024.02.06
[Project] AI MEDICO 최종 (글 수정중)  (0) 2024.02.02
  1. 주제
  2. 크롤링
  3. Notion과 GPTs연결
  4. 응답예시
  5. 자동화
'IT/Project' 카테고리의 다른 글
  • KR_Labs 개발기 1편
  • [GPTs] GPTs 묘지
  • [가구찾아] 쿠팡 크롤링 로그인하기
  • [가구찾아] GPTs 가구찾아주는 서비스 만들기 - 1
생각 기록실
생각 기록실
AI(LLM)와 서비스 기획을 공부하며 작성하는 기술 블로그입니다. (feat. 영화리뷰를 곁들인..)
    반응형
  • 생각 기록실
    이러쿵 저러쿵
    생각 기록실
  • 전체
    오늘
    어제
  • 링크

    • Github
    • LindeIn
    • 분류 전체보기 (115)
      • 이러쿵 저러쿵 (5)
      • 정보통계 (7)
        • 데이터마이닝 (2)
        • 금융공학 (4)
      • IT (26)
        • Python (10)
        • AWS (5)
        • Github (2)
        • Project (8)
      • 리뷰 (29)
        • 영화 (22)
        • 책 (7)
      • 기타 (48)
  • hELLO· Designed By정상우.v4.10.3
생각 기록실
[GPTs] 단대학식 - 1

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.