오늘은 옥션 최저가 항공권 텔레그램 메세지를 받을 수 있는 파이썬 프로그램 관련 글입니다. 최근에 코로나가 풀리고 사람들이 많이들 여행을 가서 그런지 내가 원하는 시간대의 제주도행 티켓이 없고, 있더라도 터무니 없이 비쌉니다. 대략 2개월전에 미리 예약하면 그나마 좀 나은 편이지만, 기간이 촉박한 상태에서 티켓을 예매 하다 보면 터무니 없이 비싸죠
결국 합리적인 가격으로 비행기표를 예매할 수 있도록 자동 티켓예매 프로그램을 제작하기로 합니다
최저가 항공권 파이썬 프로그램 소개
이번 프로그램은 옥션 최저가 항공티켓의 정보를 실시간으로 받아와 너무 비싸지 않은 가격으로 비행기표를 예매할 수 있는 프로그램을 만들어 보겠습니다.
향후 진행 순서
이후 글부터 진행되는 세부적인 내용은 다음과 같습니다.
1.원하는 날짜 선택하기
우리는 대부분 직장인이기 때문에 매주 금요일 저녁에 업무를 마치고 제주도로 간다고 가정하겠습니다. 여기 서는 파이썬으로 2개월치 매주 금요일의 날짜를 가져오는 방법에 대하여 알아 보도록 하겠습니다.
2. 선택한 날짜의 항공 티켓 정보 받아오기
– 위의 1에서 우리가 선택한 날짜의 티켓 정보를 파이썬의 셀레니움과 크롤링 기법을 응용하여 가져와서 엑셀파일로 저장하는 방법에 대하여 알아보겠습니다.
3.티켓정보에서 내가 원하는 시간대로 필터하기
-금요일이라고 해도 새벽 6시 티켓 등은 우리가 원하는 티켓이 아닙니다. 따라서 우리가 원하는 시간대인 업무 종료 시간 17시~20시 사이의 티켓 정보만 필터 해서 가져오는 방법을 설명합니다.
4.시간대로 필터한 티켓 중에서 최저가 티켓 뽑아오기
-금요일 17시~20시 사이의 티켓들 중에서 가장 가격이 낮은 티켓의 정보를 가져오는 방법을 알아보겠습니다.
5.위의 내용을 종합하여 메신저로 최저가 정보와 전체 항공티켓 정보 받기
-위에서 했던 내용들을 조금만 응용하여 텔레그램 메신저에 실시간으로 최저가 정보를 뿌려주고, 추가적인 정보를 확인할 수 있도록 전체 정보는 엑셀파일로 첨부하여 메신저로 보내주는 방법에 대하여 살펴보겠습니다.
완성된 프로그램 실행 화면
– 최종 완성된 프로그램의 결과화면은 아래와 같습니다.
(1)옥션 최저가 항공티켓의 정보를 실시간으로 받아와 너무 비싸지 않은 가격으로 비행기표를 예매할 수 있는 프로그램
프로그램을 처음 실행 시 아래와 같이 실행됩니다.
그리고 프로그램 내 크롬드라이버를 사용한 파이썬의 셀레니움을 이용하여 자동으로 웹브라우저를 실행 후 티켓정보를 가져오기 시작합니다.
2. 아래는 2개월치 옥션 항공 티켓 정보를 가져오고 있는 모습입니다.
3. 동시에 가져온 티켓정보를 메신저에 최저가 정보를 뿌려주고, 전체 항공티켓 세부 정보는 파일로 보내줍니다.
4.윈도우탐색기에 해당 파일이 잘 저장된 것을 볼 수 있습니다.
(여기서는 1,2월 2개월치 데이터인 1/6부터 매주 금요일치 정보 8주치를 수집하고 있음)
5. 엑셀파일을 열어보니 항공사별 티켓정보가 예상한 대로 잘 저장되어 있습니다.
6. 프로그램이 최종적으로 완료되면, 아래와 같이 윈도우 탐색기에 매주 금요일의 티켓정보를 담고 있는 8주치 파일 8개가 저장됩니다.
7. 아래는 우리가 원하는 시간대(17시~20시)에 티켓이 없는 경우 ‘티켓이 없습니다.’ 라고 안내주고 있으며,
1/20의 경우 설명절로 이미 티켓이 매진된것으로 보입니다.
8.매신저에서도 실시간으로 2개월치 티켓정보(총 8번)가 잘 보여지고 있습니다.
그럼, 우리가 원하는 날짜인 매주 금요일에 대한 날짜 정보를 얻어오는 방법에 대하여 알아 보겠습니다.
완성된 프로그램 실행 화면
1.프로그램을 실행하면 2023년 1월 중 금요일에 해당하는 날짜인 아래 4개 날짜를 리스트로 받아오는 것을 볼 수 있습니다.
[‘2023-01-06’, ‘2023-01-13’, ‘2023-01-20’, ‘2023-01-27’]
주요 내용
1. 소스코드를 먼저 살펴 보겠습니다.
먼저 날짜 관련 모듈과 판다스 모듈을 임포트 해줍니다.
그리고 데이터프레임형태로 날짜 데이터를 뽑아서
dt_index = pd.date_range(start=’20230101′, end=’20230131′)
이 데이터프레임을 리스트로 바꿔 줍니다.
dt_list = dt_index.strftime(“%Y.%m.%d”).tolist()
금요일에 해당하는 날짜만 뽑을 것이기 때문에 이것을 담아둘 리스트 변수(fridays)를 만들어 둡니다.
for문으로 1월 날짜를 하나씩 돌면서 ‘금요일’인지를 찾습니다. 날짜에 해당하는 요일을 찾아주는 함수가 weekday()입니다.
i.weekday()로 사용하면 해당 요일을 숫자로 표시해 줍니다.
0 1 2 3 4 5 6
월 화 수 목 금 토 일
if문으로 weekday()가 4이면 금요일 이므로 이 값을 미리 만들어둔 fridays[]리스트에 append로 담아 둡니다.
for문이 완료되면 fridays[]리스트에는 1월 중 금요일에 해당하는 날짜만 들어가게 됩니다.
(자세한 내용은 아래 소스의 코멘트를 참조해 주세요.)
2. 위의 소스코드를 실행한 모습입니다.
1월의 모든 날짜 정보가 ‘dt_list’에 들어가 있는 것을 알 수 있습니다.
3. 디버깅(print문 등)을 좀 제거하여 보기좋게 한다음 프로그램을 실행하면, 최종적으로 우리가 원하는 매주 금요일의 날짜 데이터를 얻어온 것을 볼 수 있습니다.
O 완성된 프로그램 실행 화면
1.프로그램을 실행하면 아래와 같은 모습으로 실행되며, 일단 이해를 위해서 간략하게 2023년 1월 중 금요일 2개만 테스트해 봅니다.
[‘2023-01-06’, ‘2023-01-13’]
2. 크롬드라이버(셀레니움)가 자동으로 웹브라우저를 실행하여 지정한 곳을 클릭하여 선택하고 있습니다.
3.항공사별 티켓 정보를 보여주는 화면입니다.
4.최종적으로 금요일 2개 날짜에 해당하는 정보를 수집하여 엑셀파일로 저장한 모습입니다.
5. 파일을 열어보니 항공사별 티켓정보가 잘 저장된 것을 확인할 수 있습니다.
O 주요 내용
1. 소스코드를 먼저 살펴 보겠습니다.
아래 부분 소스의 경우 다른 부분은 이전 글과 동일하며, 이해를 쉽게하기 위하여 2주치 금요일 2개만 설정하여 테스트하였습니다.
2. 그리고 나서 셀레니움을 사용하기 위해 크롬 드라이버를 설정해 줍니다.
browser =webdriver.Chrome(“chromedriver.exe”)
셀레니움 이용 시 브라우저를 띄우고 실행하기 때문에 다소 시간이 걸리기 때문에 반드시 지연시간(time.sleep())을 넣어 주어야 에러가 발생하지 않습니다.
3. 아래와 같이 크롬의 검사 기능을 이용하여 순서대로 실행 후 ‘Copy XPath’를 클릭하면 html 태그의 위치를 알아낼 수 있습니다.
메모장 등에 붙여넣기 하시면 아래와 같이 태그가 나오며, 이 태크를 위의 소스 (1) 부분에 넣어준것입니다.
//*[@id=”tour_wrap”]/div[1]/div[1]/a[2]/span[1]
동일한 방법으로 (2)~(5)까지 완료하시면 되며, (4)의 경우 첫주 금요일이 1부터 시작하므로 for 루프 전에 j=1을 선언(for 루프 끝나는 부분에 j = j+1 코드 포함)하여 루프를 돌때마다 1식 증가하도록 해주었습니다.
4. 다음은 파이썬의 BeautifulSoup를 이용하여 옥션 항공티켓 정보를 크롤링하는 소스입니다.
웹 페이지의 소스를 가져와서, 이를 이쁘게(?) 파싱하기 위해 아래와 같이 코딩합니다.
라인 71~72
html_souce = browser.page_source
soup = BeautifulSoup(html_souce, ‘html.parser’)
그리고 원하는 부분만 가오기 위해 아래와 같이 find를 사용하여 모든 티켓정보를 가져온 후, find_all을 사용하여 개별 티켓정보를 가져온 후 ticket_list 변수에 담습니다.
라인 77
ticket_list = soup.find(class_=’simplebar-content’).find_all(class_=’gt_offer_list_item srpResultLi’)
(class_=’simplebar-content’ 은 유일하므로 find를 사용하고, class_=’gt_offer_list_item srpResultLi’ 은 여러개 존재하므로 find_all을 사용)
아래 자세히 보면 (2)번에 마우스를 갖다대면 왼쪽의 음영(모든 티켓)이 선택되는 것을 볼 수 있습니다. 이것으로 이 태그가 모든 티켓을 나타냄을 알 수 있습니다.
아래 오른 쪽 <li>태그에 마우스를 갖다대면 마찬가지로 왼쪽에 음영이 생기는데, 이번에는 티켓 하나만 선택 되었습니다.
즉, 이 태그가 하나의 티켓을 가리키고 있다는 것을 알 수 있습니다.
위의 소스는 일단 테스트를 위해 티켓 하나에 대한 정보만 가져와서 뿌려보았습니다.
라인 83
print(ticket_list[0])
특정 태그를 선택 시 find 또는 select를 사용할 수 있으며, 기호에 맞게 사용하시면 되며, 저는 find를 사용하였습니다.
라인 84~85
print(ticket_list[0].find(“div”,class_=’gt_offer_col gt_offer_company’).text.strip())
print(ticket_list[0].select(‘div.gt_offer_col.gt_offer_company > img’)[0][‘alt’],”+++++++++++++”)
위의 84라인은 해당 클래스에 해당하는 태그 정보 중 텍스트를 가져오는 것인데, strip()를 사용하여 양쪽 옆 빈칸을 제거해 주고 있습니다.
5. 위에서 티켓정보 1개만 가져와서 테스트해 본 결과 잘되는 것을 확인하였으므로, 이제 티켓정보를 모두 가져오는 코드를 아래와 같이 작성합니다.
소스에 대한 설명은 아래를 참고하시기 바랍니다.
6. 실행 결과 엑셀 파일이 잘 생성된 것을 확인 할 수 있으며,
7. 엑셀 파일을 열어보니 내용(티켓 정보)이 잘 입력된 것을 볼 수 있습니다.
O 완성된 프로그램 실행 화면
1.프로그램을 실행하면 아래와 같은 모습으로 실행되며, 일단 쉬운 이해를 위해서 간략하게 2023년 2월 중 금요일 2개만, 그리고 티켓리스트 중 위에서부터 10개만 테스트해 보았습니다.
[‘2023-03-06’, ‘2023-01-13’]
2. 프로그램 실행 결과 2/3일자 티켓 상위 10개 중 17~21시 조건을 만족하는 티켓은 없었습니다.
아래에서 보듯이 상위 10개 티켓 중 17시 이후에 출발하는 비행기는 없습니다.
3. 2월 10일자는 티켓 상위 10개 중 17~21시 조건을 만족하는 티켓이 아래와 같이 1개 존재하는 것을 확인하였습니다.
실제 옥션 웹페이지에서 확인 결과도 위에서 2번째 티켓이 우리의 시간 조건(17~21시)에 맞는 것을 확인할 수 있습니다.
1. 소스를 살펴보겠습니다.
다른 부분은 이전 글의 소스와 모두 동일하므로 아래 주요 부분만 설명드리겠습니다.
라인 131 : 웹페이지에서 출발시각 및 도착 시각 정보를 가져옵니다. (11:25 12:35)
라인 132 : 위에서 가져온 시각 정보 중 출발시각 정보만 뽑습니다. (11:25)
라인 133 : 시간 비교를 위해서 데이터 포멧을 str -> date형으로 바꿔 줍니다.
라인 134 : 크롤링해서 가져온 시각을 중심으로 비교하기 위해 mytime변수에 그 시각 정보를 넣어 줍니다.(mytime = 1900-01-01 11:25:00)
라인 136 : 시간조건의 시작 시간을 지정해 줍니다.(1900-01-01 17:00:00)
라인 138 : 시간조건의 끝 시간을 지정해 줍니다.(1900-01-01 21:00:00)
아래 구글 크롬에서 출발 시각 우클릭 > 검사 클릭 시 오른쪽 화면에서 아래와 같이 출발 시각이 선택된 것을 확인할 수 있습니다.
time_ = ticket_list[i].find(“div”,class_=’gt_offer_col gt_offer_time’).text.strip()
완성된 프로그램 실행 화면
1.프로그램을 실행하면 아래와 같은 모습으로 실행되며, 일단 쉬운 이해를 위해서 간략하게 2023년 2월 중 금요일 2개만, 그리고 해당 요일의 전체 티켓리스트 중 위에서부터 10개만 테스트해 보았습니다.
[‘2023-02-10’, ‘2023-02-17’]
아래 프로그램 실행 결과 ‘2023-02-10’과 ‘2023-02-17’ 2개 금요일만 테스트하며, 2월 10일은 조건에 맞는 티켓이 없음을 알 수 있습니다.
실제 옥션 항공 웹페이지 화면에서 확인해도 조건에 맞는 티켓이 없는 것을 알 수 있습니다.
2. 두번째 날짜인 2월 17일의 경우 상위 10개 중 4개가 만족하여 리스트 되고 있습니다.
실제 옥션 항공 웹페이지 화면 확인 결과 아래 4개가 만족하여 리스트되고 있는 것을 확인 할 수 있습니다.
다음글에서는 이전 글들을 조합하여 실제 우리가 원하는 금요일 티켓의 17~21시 사이 티켓들 중에서 가격이 가장싼 티켓을 선택하여 나에게 메신저로 알려주는 방법에 대하여 알아 보겠습니다.
O 주요 내용
1. 소스를 살펴보겠습니다.
다른 부분은 이전 글의 소스와 모두 동일하므로 달라진 부분만 설명드리겠습니다.
print(airline_ticket_df) <– (1) 수집한 티켓정보를 데이터 프레임 형식을 표시(아래 참고)
try:
print(airline_ticket_df.loc[airline_ticket_df[“편도1인요금”].idxmin()]) <– (2) 데이터프레임에서 ‘편도1인요금’ 컬럼 중 숫자가 가장작은 부분을 상세하게 출력
print(airline_ticket_df[‘편도1인요금’].min()) <– (3) 데이터프레임에서 ‘편도1인요금’ 컬럼 중 가장 작은 숫자만 표시
except:
pass
print(k, ” 일자는 조건을 만족하는 티켓이 없습니다.”)
완성된 프로그램 실행 화면
1.프로그램을 실행하면 아래와 같은 모습으로 실행되며, 아래 프로그램을 실행한 시점은 2월 8일, 따라서 2월~3월의 금요일인 2/10~3/31까지 총 8번에 걸쳐 티켓정보를 수집합니다.
[‘2023-02-10’, ‘2023-02-17’, ‘2023-02-24’, ‘2023-03-03’, ‘2023-03-10’, ‘2023-03-17’, ‘2023-03-24’, ‘2023-03-31’]
2.아래와 같이 파이썬의 셀레니움으로 크롬 브라우저를 자동으로 띄워 원하는 일자의 티켓정보를 수집하기위해 자동으로 클릭하기 시작합니다.
3. 파이썬의 크롤링 기법으로 2개월치 데이터를 가져오고 있습니다.
4. 텔레그램 메신저에 해당 일자의 최저가 티켓 정보와 나머지 티켓 정보도 확인할 수 있도록 파일로 보내줍니다.
5. 파일 탐색기에서 확인한 결과 파일로 티켓의 정보가 잘 저장되고 있는 것을 확인할 수 있습니다.
6. 2/10일자 파일을 열어보니 파일 내용에 티켓의 세부정보가 잘 저장된 것을 확인 할 수 있습니다.
7. 3/31일자까지 모두 자동 수행 후 모든 파일이 탐색기에 저장된 것을 볼 수 있습니다. 다만, 프로그램을 실행한 날짜가 2/8 이므로 그 전 날짜의 티켓인 2/3일자 티켓은 제외하고 나머지 2~3월 금요일의 모든 티켓정보가 저장되었습니다.
8. 메신저로도 모두 최저가 정보와 모든 티켓정보가 담긴 파일로 잘 수신되었습니다.
세부 내용
O 완성된 소스
소스 : 1.py
import datetime
from datetime import datetime, timedelta, date
from dateutil import relativedelta
from selenium import webdriver # pip install selenium
from selenium.webdriver.common.by import By
import time
from openpyxl import Workbook
import pandas as pd
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import telegram
import pandas as pd
# 텔레그램 설정 부분
bot = telegram.Bot(token='자산의 텔레그램 봇 엑세스 키')
###################################################
# 1. 금요일의 날짜를 구하여 리스트에 담기
###################################################
today = date.today()
#해당 달의 첫째날 구하기
first_day = today.replace(day=1)
this_month = datetime(today.year, today.month, day=1)
next_2month = this_month + relativedelta.relativedelta(months=2)
last_day = next_2month - timedelta(days=1)
print(last_day.strftime("%Y%m%d"))
endDate = last_day.strftime("%Y%m%d")
startDate = datetime.today().strftime("%Y%m%d")
dt_index = pd.date_range(start=startDate, end=endDate)
dt_list = dt_index.strftime("%Y.%m.%d").tolist()
fridays = []
for i in dt_list:
i = datetime.strptime(i, '%Y.%m.%d')
if i.weekday() == 4:
j = str(i)
fridays.append(j[:10])
print(fridays)
# ['2023-01-06', '2023-01-13', '2023-01-20', '2023-01-27']
###################################################
# 2. 셀레니움으로 옥션 항공티켓 정보 가져오기
###################################################
browser =webdriver.Chrome("chromedriver.exe")
j = 3 # j는 1은 첫째주, 2는 둘째주, 3은 셋째주, 4는 네째주임
l = 1 # 1이면 가는날 창의 완쪽, 2이면 가는날 창의 오른쪽임
for k in fridays:
time.sleep(2)
browser.get("http://air.auction.co.kr/au/init/lp/lpMain.do")
time.sleep(2)
browser.find_element(By.XPATH,'//*[@id="tour_wrap"]/div[1]/div[1]/a[2]/span[1]').click() # 국내항공
time.sleep(2)
browser.find_element(By.XPATH,'//*[@id="tour_wrap"]/div[1]/div[4]/div[2]/div[3]/a[1]').click() # 편도
time.sleep(2)
browser.find_element(By.XPATH,'//*[@id="tour_wrap"]/div[1]/div[4]/div[2]/div[4]/div[4]/div[1]/div/span').click() # 가는날
time.sleep(2)
browser.find_element(By.XPATH,'//*[@id="ui-datepicker-div"]/div['+str(l)+']/table/tbody/tr['+str(j)+']/td[6]/a').click() # 1/6 일
time.sleep(1)
browser.find_element(By.XPATH,'//*[@id="tour_wrap"]/div[1]/div[4]/div[4]/a/span').click() # 검색하기
time.sleep(15)
html_souce = browser.page_source
soup = BeautifulSoup(html_souce, 'html.parser')
ticket_list = soup.find(class_='simplebar-content').find_all(class_='gt_offer_list_item srpResultLi')
print(type(ticket_list))
print(len(ticket_list))
print("========================================================================")
print(ticket_list[0])
print(ticket_list[0].find("div",class_='gt_offer_col gt_offer_company').text.strip())
print(ticket_list[0].select('div.gt_offer_col.gt_offer_company > img')[0]['alt'],"+++++++++++++")
print(ticket_list[0].find("div",class_='gt_offer_col gt_offer_time').text.strip())
print(ticket_list[0].find("div",class_='gt_offer_col gt_offer_level').text.strip())
print(ticket_list[0].find("div",class_='gt_offer_col gt_offer_vender').text.strip())
print(ticket_list[0].find("div",class_='gt_offer_col gt_offer_seats2').text.strip())
print(ticket_list[0].find("div",class_='gt_offer_col gt_offer_price2').text.strip())
companys = []
times_ = []
levels = []
venders = []
seats = []
prices = []
for i in range(len(ticket_list)):
time_ = ticket_list[i].find("div",class_='gt_offer_col gt_offer_time').text.strip()
time_ = time_[0:5]
dateFormatter = "%H:%M" # 날짜 포멧 맞추기
mytime = datetime.strptime(time_, dateFormatter)
first_time = datetime.strptime("17:00", dateFormatter)
last_time = datetime.strptime("21:00", dateFormatter)
if mytime > first_time and mytime < last_time:
company = ticket_list[i].select('div.gt_offer_col.gt_offer_company > img')[0]['alt']
time_ = ticket_list[i].find("div",class_='gt_offer_col gt_offer_time').text.strip()
level = ticket_list[i].find("div",class_='gt_offer_col gt_offer_level').text.strip()
vender = ticket_list[i].find("div",class_='gt_offer_col gt_offer_vender').text.strip()
seat = ticket_list[i].find("div",class_='gt_offer_col gt_offer_seats2').text.strip()
price = ticket_list[i].find("div",class_='gt_offer_col gt_offer_price2').text.strip().replace('스마일페이 결제 가능','').replace(',','')
print(company, time_, level, vender, seat, price)
companys.append(company)
times_.append(time_)
levels.append(level)
venders.append(vender)
seats.append(seat)
prices.append(price)
else:
pass
pd_data = {"항공사" : companys, "출발/도착 시간" : times_, "좌석구분": levels, "판매사": venders, "잔여좌석": seats, "편도1인요금": prices}
airline_ticket_df = pd.DataFrame(pd_data)
airline_ticket_df['편도1인요금'] = pd.to_numeric(airline_ticket_df['편도1인요금']) # 이걸 안해주면 시리즈 타입으로 .idxmin()에서 에러 발생, 숫자 타입으로 변경해 줘야 함
airline_ticket_result = 'airline_ticket_result_'+str(k)+'.xlsx'
airline_ticket_df.to_excel(airline_ticket_result)
time.sleep(1)
try:
pass
print(airline_ticket_df.loc[airline_ticket_df["편도1인요금"].idxmin()])
minticketInfo = airline_ticket_df.loc[airline_ticket_df["편도1인요금"].idxmin()]
print(airline_ticket_df['편도1인요금'].min())
# 텔레그램으로 메시지 보내기
bot.sendMessage(chat_id='본인의 챗id', text='옥션 항공티켓 최저가 정보인 ' +airline_ticket_result+' 파일입니다.\n'+str(minticketInfo))
# 텔레그램으로 파일 보내기
bot.send_document(chat_id='본인의 챗id', document=open(airline_ticket_result, 'rb'), filename=airline_ticket_result)
except:
pass
bot.sendMessage(chat_id='본인의 챗id', text=str(k)+' 날짜는 티켓정보가 없습니다.\n(해당 시간대 티켓이 없거나, 기타 다른 이유 등으로 티켓정보를 받아올 수 없습니다.) ')
print("========================================================================")
j = j + 1
if j > 4:
j = 1 # 네번째 주가 넘어가면 다시 다음월의 첫째주가 되므로 j=1로 초기화 해주고,
l = 2 # 4주가 넘어가면 다음월 즉, 오른쪽 창에서 선택해야 하므로 l을 2로 바꿔줌
O 주요 내용
1. 소스를 살펴보겠습니다.
다른 부분은 이전 글의 소스와 모두 동일하므로 달라진 부분만 설명드리겠습니다.
날짜 및 텔레그램 관련 모듈을 임포트 해주고, 메신저로 최저가 정보와 모든 티켓의 상세정보를 파일로 보낼 것이기 때문에 텔레그램 봇을 아래와 같이 설정해 줍니다.
2. 날짜를 수기로 넣어주는 것이 아닌, 자동으로 계산하기 위하여 아래와 같은 코드로 자동계산 하도록 코딩합니다.
3. 2개월치 데이터를 수집할 것이므로 해당월의 주차수와 왼쪽/오른쪽 창을 구분하여 셀레니움이 클릭할 수 있도록 해주어야 합니다.
아래와 같이 j변수는 주차 수를 나타내며, l변수는 가는날 창의 왼쪽(1), 오른쪽(2)을 나타내고, 구분할 수 있도록 설정해 줍니다.
4. 이전 글에서는 테스트로 티켓 10개만 돌렸으나, 여기서는 모든 티켓을 대상으로 수행해야 하므로 해당일자의 티켓 개수만큼 루프를 돌려줍니다.
5. 메신저에서 최저가 티켓의 세부정보를 표시해 주려면 최저가에 해당하는 ‘편도1인요금’ 컬럼의 값을 숫자형으로 변경해 준 후 데이터프레임의 .loc()로 가져와야 합니다. 아래와 같이 표현해 줍니다.
airline_ticket_df[‘편도1인요금’] = pd.to_numeric(airline_ticket_df[‘편도1인요금’])
그리고 난 후 가져온 티켓 정보를 엑셀 파일로 저장 후 (라인 192~194)
메신저로 최저가 정보와(라인 208)
생성한 엑셀파일을 첨부로 보냅니다.(라인 212)
6. 마지막으로 2월이 끝나면(보통 4주차) 다시 3월의 첫번째 주가 시작되므로 주차를 표시하는 j변수가 4보다 크면 1로 초기화 시켜 줍니다.
그리고 오션의 티켓을 예매하는 화면이 좌(2월), 우(3월)로 구분되어 있으므로 셀레니움으로 클릭시 이를 구분해 주어야 합니다.
그래서 l변수에 왼쪽 창을 1로, 오른쪽 창을 2로 구분해 주고, 다음월로 넘어갈때(즉, 위의 j변수가 4보다 클때) l변수를 2로 만들어 주었습니다.