-
카카오톡 인천대학교 학식봇 만들기 (크롤링)- 2App 2021. 6. 29. 21:43
어제 작성한 크롤링 코드에서, 오류들을 수정했다.
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') if menu: is_Today = True # 해당 내용을 찾으면, 오늘 메뉴를 가져온것이므로 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])
오늘 메뉴만 class명이 'din_lists'로 다르기 때문에, 오늘 메뉴를 가져오는 부분에서 해당 메뉴가 들어있는 칸을 탐색하지 않았음에도 불구하고 is_Today가 True로 바뀌는 바람에 오늘 메뉴를 가져오지 못하는 오류를 수정함.
15, 19줄에서 사용한 코드에서, td 하나만 찾고 한줄이 끝나는 오류가 아직 있음.
'App' 카테고리의 다른 글
카카오톡 인천대학교 학식봇 만들기(AWS Lambda) - 5 (0) 2021.07.05 카카오톡 인천대학교 학식봇 만들기(크롤링) - 4 (0) 2021.07.02 카카오톡 인천대학교 학식봇 만들기(크롤링) - 3 (0) 2021.07.01 카카오톡 인천대학교 학식봇 만들기 - 1 (0) 2021.06.29 MVVM 아키텍쳐 (0) 2021.02.10