ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 카카오톡 인천대학교 학식봇 만들기 (크롤링)- 2
    App 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 하나만 찾고 한줄이 끝나는 오류가 아직 있음.

Designed by Tistory.