- Selenium을 활용한 학교 식단정보 크롤링 -
<개요>
1. 크롬 드라이버를 통해 학교 식단 홈페이지에 접속
2. table로 이루어진 식단표에 접근하여 데이터를 받아 출력
<코드 설명>
시작하기 전에 자신의 chrome 과 맞는 버전의 chromedriver.exe 파일을 설치해,
실행하려는 코드와 같은 경로 상에 위치
import time
from selenium import webdriver
필요한 라이브러리들 import
time 라이브러리는 웹상에서 로딩하는 시간을 기다려주기 위함임
# 크롬 드라이버 실행
driver = webdriver.Chrome('./chromedriver.exe') # 주소 앞에 . 붙여서 chromedriver 실행
# 학교 식단정보 홈페이지 주소를 가지고 옴.
driver.get("https://www.kopo.ac.kr/daegu/content.do?menu=4175")
time.sleep(0.3)
크롬 드라이버를 이용해 웹 브라우저를 실행시켜 학교 식단정보 홈페이지 주소로 접속
# 요일 선택지 제공
days = ['월', '화', '수', '목', '금']
for i, day in enumerate(days):
print(f"{i+1}.{day}\t", end='')
print()
# input 을 통해 요일 선택할 것임
userInput = int(input("요일을 선택하세요 : "))
print()
요일 선택지를 제공
for문에서 enumerate함수 활용시 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환
1. 월 2. 화 3. 수 4. 목 5. 금 --> 이런식으로 출력
1번부터 시작하기 위해 i+1
# table 을 불러올 때 전체 테이블의 full xpath 주소
table = driver.find_element_by_xpath("/html/body/div[2]/article/div[1]/section[2]/div/div[2]/table[2]")
# table 안에 있는 tbody 를 tag_name 을 통해 가져옴
tbody = table.find_element_by_tag_name("tbody")
# tbody 안에 있는 몇 번째 행을 가져올것인지 userInput 을 통해 결정
rows = tbody.find_elements_by_tag_name("tr")[userInput - 1]
# tr (행)중 모든 td (열)들을 가져옴
columns = rows.find_elements_by_tag_name("td")
find_element_by_xpath 메소드를 활용해 전체 table 주소를 table 변수에 저장
find_element_by_tag_name 메소드를 활용해 table 안에 있는 tbody 를 tbody 변수에 저장
find_elements_by_tag_name 메소드를 활용해 tr 을 rows 변수에 저장
여기서 element 와 elements 의 차이는 단수/복수를 담는 것의 차이
--> tbody 와 달리 tr 은 여러개 존재하기 때문에 elemnets를 사용
마지막으로 find_elements_by_tag_name 메소드를 활용해 td 들을 columns 변수에 저장
# userInput 을 통한 요일 출력
if userInput == 1:
print("<월요일 식단>")
elif userInput == 2:
print("<화요일 식단>")
elif userInput == 3:
print("<수요일 식단>")
elif userInput == 4:
print("<목요일 식단>")
elif userInput == 5:
print("<금요일 식단>")
# columns 는 리스트 형태 --> 인덱스로 접근하여 아침, 점심, 저녁을 출력
# columns 를 출력하면 주소값이 출력이 되므로 .text 메소드를 활용해 출력
print("아침 : " + columns[1].text)
print("점심 : " + columns[2].text)
print("저녁 : " + columns[3].text)
요일과 함께 시간별 메뉴를 출력
print()
print("^^ 식사 맛있게 하세요 ^^")
driver.close()
문구와 함께 크롬 드라이버를 종료
<전체 코드>
import time
from selenium import webdriver
days = ['월', '화', '수', '목', '금']
for i, day in enumerate(days):
print(f"{i+1}.{day}\t", end='')
print()
userInput = int(input("요일을 선택하세요 : "))
print()
driver = webdriver.Chrome('./chromedriver.exe')
driver.get("https://www.kopo.ac.kr/daegu/content.do?menu=4175")
time.sleep(0.3)
table = driver.find_element_by_xpath("/html/body/div[2]/article/div[1]/section[2]/div/div[2]/table[2]")
tbody = table.find_element_by_tag_name("tbody")
rows = tbody.find_elements_by_tag_name("tr")[userInput - 1]
columns = rows.find_elements_by_tag_name("td")
if userInput == 1:
print("<월요일 식단>")
elif userInput == 2:
print("<화요일 식단>")
elif userInput == 3:
print("<수요일 식단>")
elif userInput == 4:
print("<목요일 식단>")
elif userInput == 5:
print("<금요일 식단>")
print("아침 : " + columns[1].text)
print("점심 : " + columns[2].text)
print("저녁 : " + columns[3].text)
print()
print("^^ 식사 맛있게 하세요 ^^")
driver.close()
<실행 화면>
- Just Do It -
'Python > Web_crawling' 카테고리의 다른 글
[Python] 항공권 크롤링 (3) | 2021.07.31 |
---|