반응형
반응형
반응형

[셀레니움 응용] 네이버 항공권 검색 3편 가격 검색

파이썬 셀레니움을 사용하여 네이버 항공권 정보를 얻어오는 방법을 소개합니다.




목차:




1. 항공권 정보 파싱하기

1, 2편을 수행하여 공항, 날짜를 선택하였습니다. 항공권 검색을 통해 해당하는 항공권의 검색을 파싱해보겠습니다.

  • 홈페이지의 정보를 파싱하기 위해 Beautiful Soup4 (bs4) 패키지를 사용합니다. 해당 패키지의 사용법은 여기를 클릭하여 확인할 수 있습니다.

  • 자세한 설명은 주석을 통해 대신합니다.


# 이 프로젝트에서는 왕복 항공권을 기준으로 작성되었습니다.
# selenium Ver : 3.14.1
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 웹드라이버 열기 (네이버 항공권)
driver = webdriver.Chrome()
driver.get("https://flight.naver.com/")
time.sleep(1)

# 입력칸에 출발지, 목적지를 입력하고 목록 중 첫번 째를 선택하는 함수
def airway(parts):
    for part in parts:
        # Xpath를 분석 > 출발지:button[1], 도착지:button[2]인 것을 반복문을 통해 간소화 list Index : 0, 1
        index = parts.index(part)
        driver.find_element_by_xpath(f'//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[1]/button[{int(index)+1}]').click()
        driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[1]/div/input').send_keys(part)
        time.sleep(0.1)
        driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[2]/section/div').click()
        time.sleep(0.5)
# 가는날, 오는날 선택하는 함수
def select_dates(month, week, day):
    print(f"week 번호 : {week}   요일 번호 : {day}")
    driver.find_element_by_xpath(f'//*[@id="__next"]/div/div[1]/div[9]/div[2]/div[1]/div[2]/div/div[{month}]/table/tbody/tr[{week}]/td[{day}]/button/b').click()
    time.sleep(0.1)

# 출발, 도착지 [김포, 제주]
ports = {'김포':'GMP','인천':'ICN','제주':'CJU','김해':'PUS','대구':'TAE'}
points = [ports['김포'],ports['제주']]
print(points)
airway(points)

# 가는 날 클릭
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[2]/button[1]').click()
time.sleep(1)

# 이번 달
month = 2
# 3주 차 // 2주 차 = 2 // 현재에 맞게 수정하세요.
week = 3
# 요일 선택
day_go = '토요일'
# 체류 기간
day_n_nights = 4

# 검색 할 요일 선택
days = ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일']
day = days.index(day_go)+1      # 선택한 요일
select_dates(month, week, day)  # 출발날짜 : select_dates 함수에 월, 주차, 요일 입력 후 클릭
day = day+day_n_nights-1        # 도착날짜 계산 > +체류 기간
# 체류기간에 따라 바뀌는 주(week) 계산
if day > 7:
    week+=day//7
    day = day%7
try:
    # 만약 체류 기간이 2개의 달(11월~12월)에 걸쳐있을 경우
    select_dates(month, week, day)
except:
    if week >= 4:
        month += 1
        week = 1
        select_dates(month, week, day)

# 항공권 검색 버튼 클릭
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[4]/div/div/button').click()

delay = 10
for i in range(delay):
    time.sleep(1)
    print(f'{delay-i}초 후 실행됩니다.')

from bs4 import BeautifulSoup as bs

# 모든 항공권 정보를 얻기 위해 가장 아래까지 스크롤
for i in range(10):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    time.sleep(0.2)

# 크롬드라이버의 현재 페이지의 url 얻기
page_url = driver.page_source
# 현재 url 주소의 html 데이터를 파싱
soup = bs(page_url, "html.parser")
flights = soup.find_all(class_='result')

# 항공권 정보가 리스트로 저장되어 있습니다.
for flight in flights:
    print(flight.text)

print(f'총 {len(flights)}개의 항공권 정보를 불러왔습니다.')

항공권 검색 시 로딩 시간은 time.sleep(10)을 통해 10초 대기합니다. 여러가지 상황에 따라 달라질 수 있으므로 시간을 직접 설정하세요.




결과창 펼쳐보기 (21년 11월 05일 기준)
['GMP', 'CJU']
10초 후 실행됩니다.
9초 후 실행됩니다.
8초 후 실행됩니다.
7초 후 실행됩니다.
6초 후 실행됩니다.
5초 후 실행됩니다.
4초 후 실행됩니다.
3초 후 실행됩니다.
2초 후 실행됩니다.
1초 후 실행됩니다.
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:05GMP07:15CJU01시간 10분할인석편도 113,300원~네이버페이 결제시 1%+1,500원 적립편도 110,667원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립06:05GMP07:10CJU01시간 05분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:05GMP07:15CJU01시간 10분일반석편도 117,500원~네이버페이 결제시 1%+1,500원 적립편도 114,825원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:05GMP07:10CJU01시간 05분할인석편도 123,500원~네이버페이 결제시 1%+1,500원 적립편도 121,755원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:05GMP07:10CJU01시간 05분일반석편도 130,500원~네이버페이 결제시 1%+1,500원 적립편도 127,695원~
에어서울06:10GMP07:10CJU01시간 00분할인석편도 109,400원~KB국민카드 결제시 1% 청구할인편도 109,310원~
에어서울06:10GMP07:10CJU01시간 00분일반석편도 116,500원~KB국민카드 결제시 1% 청구할인편도 115,350원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:10GMP07:20CJU01시간 10분일반석편도 129,500원~네이버페이 결제시 1%+1,500원 적립편도 127,695원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:10GMP07:20CJU01시간 10분비즈니스석편도 187,500원~네이버페이 결제시 1%+1,500원 적립편도 184,125원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:20GMP07:30CJU01시간 10분할인석편도 123,500원~네이버페이 결제시 1%+1,500원 적립편도 121,755원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:20GMP07:30CJU01시간 10분일반석편도 130,500원~네이버페이 결제시 1%+1,500원 적립편도 127,695원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립06:30GMP07:40CJU01시간 10분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:30GMP07:45CJU01시간 15분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 114,825원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:35GMP07:50CJU01시간 15분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 114,825원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:40GMP07:50CJU01시간 10분일반석편도 115,400원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
에어서울06:45GMP07:45CJU01시간 00분할인석편도 109,400원~KB국민카드 결제시 1% 청구할인편도 109,310원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립06:45GMP07:55CJU01시간 10분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
에어서울06:45GMP07:45CJU01시간 00분일반석편도 116,500원~KB국민카드 결제시 1% 청구할인편도 115,350원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립06:50GMP08:00CJU01시간 10분일반석편도 129,500원~네이버페이 결제시 1%+1,500원 적립편도 127,695원~
에어부산06:55GMP08:05CJU01시간 10분일반석편도 115,500원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립07:00GMP08:10CJU01시간 10분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립07:00GMP08:10CJU01시간 10분비즈니스석편도 168,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 165,330원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립07:10GMP08:20CJU01시간 10분일반석편도 129,500원~네이버페이 결제시 1%+1,500원 적립편도 127,695원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립07:10GMP08:20CJU01시간 10분비즈니스석편도 187,500원~네이버페이 결제시 1%+1,500원 적립편도 184,125원~
에어부산07:20GMP08:30CJU01시간 10분일반석편도 115,500원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립07:20GMP08:30CJU01시간 10분비즈니스석편도 186,500원~네이버페이 결제시 1%+1,500원 적립편도 184,125원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립07:30GMP08:40CJU01시간 10분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립07:35GMP08:45CJU01시간 10분비즈니스석편도 186,500원~네이버페이 결제시 1%+1,500원 적립편도 184,125원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립09:20GMP10:30CJU01시간 10분비즈니스석편도 186,500원~네이버페이 결제시 1%+1,500원 적립편도 184,125원~
에어서울10:55GMP12:10CJU01시간 15분일반석편도 115,500원~KB국민카드 결제시 1% 청구할인편도 115,350원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립10:55GMP12:05CJU01시간 10분비즈니스석편도 186,500원~네이버페이 결제시 1%+1,500원 적립편도 184,125원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립11:00GMP12:10CJU01시간 10분비즈니스석편도 186,500원~네이버페이 결제시 1%+1,500원 적립편도 184,125원~
대한항공11:10GMP12:20CJU01시간 10분일반석편도 126,500원~KB국민카드 결제시 1% 청구할인편도 126,240원~
에어부산11:20GMP12:30CJU01시간 10분일반석편도 115,500원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립11:35GMP12:45CJU01시간 10분할인석편도 123,500원~네이버페이 결제시 1%+1,500원 적립편도 121,755원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립11:35GMP12:45CJU01시간 10분일반석편도 130,500원~네이버페이 결제시 1%+1,500원 적립편도 127,695원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립11:35GMP12:45CJU01시간 10분비즈니스석편도 187,500원~네이버페이 결제시 1%+1,500원 적립편도 184,125원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립11:45GMP12:55CJU01시간 10분일반석편도 115,400원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
대한항공12:05GMP13:15CJU01시간 10분일반석편도 126,500원~KB국민카드 결제시 1% 청구할인편도 126,240원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립12:15GMP13:25CJU01시간 10분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립12:20GMP13:30CJU01시간 10분일반석편도 109,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립12:20GMP13:30CJU01시간 10분할인석편도 113,300원~네이버페이 결제시 1%+1,500원 적립편도 110,667원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립12:20GMP13:30CJU01시간 10분일반석편도 117,500원~네이버페이 결제시 1%+1,500원 적립편도 114,825원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립12:25GMP13:40CJU01시간 15분할인석편도 111,300원~네이버페이 결제시 1%+1,500원 적립편도 108,687원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립12:25GMP13:40CJU01시간 15분일반석편도 117,500원~네이버페이 결제시 1%+1,500원 적립편도 114,825원~
대한항공12:50GMP13:55CJU01시간 05분할인석편도 115,500원~KB국민카드 결제시 1% 청구할인편도 115,350원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립12:50GMP14:00CJU01시간 10분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
대한항공12:50GMP13:55CJU01시간 05분일반석편도 127,500원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립12:55GMP14:05CJU01시간 10분일반석편도 115,400원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
대한항공13:00GMP14:15CJU01시간 15분일반석편도 126,500원~KB국민카드 결제시 1% 청구할인편도 126,240원~
대한항공13:00GMP14:15CJU01시간 15분비즈니스석편도 187,500원~KB국민카드 결제시 1% 청구할인편도 185,640원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:05GMP14:15CJU01시간 10분일반석편도 115,400원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
에어부산13:10GMP14:20CJU01시간 10분일반석편도 115,500원~
대한항공13:10GMP14:20CJU01시간 10분일반석편도 126,500원~KB국민카드 결제시 1% 청구할인편도 126,240원~
대한항공13:10GMP14:20CJU01시간 10분비즈니스석편도 187,500원~KB국민카드 결제시 1% 청구할인편도 185,640원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:20GMP14:25CJU01시간 05분일반석편도 109,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:25GMP14:35CJU01시간 10분일반석편도 109,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:30GMP14:45CJU01시간 15분할인석편도 97,800원~네이버페이 결제시 1%+1,500원 적립편도 95,322원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:30GMP14:45CJU01시간 15분일반석편도 117,500원~네이버페이 결제시 1%+1,500원 적립편도 114,825원~
대한항공13:30GMP14:40CJU01시간 10분일반석편도 126,500원~KB국민카드 결제시 1% 청구할인편도 126,240원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립13:40GMP14:50CJU01시간 10분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:45GMP14:45CJU01시간 00분일반석편도 109,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:45GMP14:45CJU01시간 00분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:50GMP15:00CJU01시간 10분할인석편도 104,500원~네이버페이 결제시 1%+1,500원 적립편도 102,945원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:50GMP15:00CJU01시간 10분일반석편도 110,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:55GMP15:10CJU01시간 15분일반석편도 109,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
대한항공13:55GMP15:05CJU01시간 10분일반석편도 126,500원~KB국민카드 결제시 1% 청구할인편도 126,240원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립13:55GMP15:10CJU01시간 15분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:05GMP15:15CJU01시간 10분일반석편도 109,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:05GMP15:15CJU01시간 10분일반석편도 115,400원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:05GMP15:15CJU01시간 10분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:20GMP15:35CJU01시간 15분할인석편도 97,800원~네이버페이 결제시 1%+1,500원 적립편도 95,322원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:20GMP15:30CJU01시간 10분일반석편도 115,400원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:20GMP15:35CJU01시간 15분일반석편도 117,500원~네이버페이 결제시 1%+1,500원 적립편도 114,825원~
대한항공14:25GMP15:35CJU01시간 10분할인석편도 115,500원~KB국민카드 결제시 1% 청구할인편도 115,350원~
대한항공14:25GMP15:35CJU01시간 10분일반석편도 127,500원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립14:40GMP15:50CJU01시간 10분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:45GMP15:55CJU01시간 10분일반석편도 109,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:45GMP15:55CJU01시간 10분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:50GMP16:00CJU01시간 10분할인석편도 93,300원~네이버페이 결제시 1%+1,500원 적립편도 91,956원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:50GMP16:00CJU01시간 10분일반석편도 109,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:50GMP16:00CJU01시간 10분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립14:50GMP16:00CJU01시간 10분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
대한항공14:55GMP16:05CJU01시간 10분일반석편도 126,500원~KB국민카드 결제시 1% 청구할인편도 126,240원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:00GMP16:10CJU01시간 10분할인석편도 94,500원~네이버페이 결제시 1%+1,500원 적립편도 93,045원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:00GMP16:10CJU01시간 10분일반석편도 110,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립15:00GMP16:10CJU01시간 10분일반석편도 116,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립15:00GMP16:10CJU01시간 10분비즈니스석편도 142,500원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 140,090원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:00GMP16:10CJU01시간 10분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
에어부산15:05GMP16:15CJU01시간 10분할인석편도 92,120원~
에어부산15:05GMP16:15CJU01시간 10분일반석편도 116,500원~
대한항공15:10GMP16:20CJU01시간 10분비즈니스석편도 164,500원~KB국민카드 결제시 1% 청구할인편도 163,860원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:20GMP16:30CJU01시간 10분할인석편도 93,300원~네이버페이 결제시 1%+1,500원 적립편도 91,956원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:20GMP16:30CJU01시간 10분할인석편도 94,500원~네이버페이 결제시 1%+1,500원 적립편도 93,045원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:20GMP16:30CJU01시간 10분일반석편도 110,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:20GMP16:30CJU01시간 10분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:30GMP16:40CJU01시간 10분할인석편도 94,500원~네이버페이 결제시 1%+1,500원 적립편도 93,045원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:30GMP16:40CJU01시간 10분일반석편도 110,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립15:30GMP16:40CJU01시간 10분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립15:40GMP16:50CJU01시간 10분할인석편도 93,400원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 92,470원~
대한항공15:40GMP16:50CJU01시간 10분일반석편도 104,500원~KB국민카드 결제시 1% 청구할인편도 104,460원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립15:40GMP16:50CJU01시간 10분일반석편도 117,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
대한항공15:40GMP16:50CJU01시간 10분비즈니스석편도 165,500원~KB국민카드 결제시 1% 청구할인편도 163,860원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립16:05GMP17:15CJU01시간 10분할인석편도 86,400원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 85,540원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립16:05GMP17:15CJU01시간 10분일반석편도 117,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립16:10GMP17:20CJU01시간 10분할인석편도 80,400원~네이버페이 결제시 1%+1,500원 적립편도 78,096원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립16:10GMP17:20CJU01시간 10분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립16:30GMP17:40CJU01시간 10분할인석편도 79,400원~네이버페이 결제시 1%+1,500원 적립편도 78,096원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립16:30GMP17:40CJU01시간 10분일반석편도 90,500원~네이버페이 결제시 1%+1,500원 적립편도 88,095원~
대한항공16:40GMP17:50CJU01시간 10분일반석편도 104,500원~KB국민카드 결제시 1% 청구할인편도 104,460원~
대한항공16:40GMP17:50CJU01시간 10분비즈니스석편도 165,500원~KB국민카드 결제시 1% 청구할인편도 163,860원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립16:55GMP18:05CJU01시간 10분할인석편도 78,400원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 77,620원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립16:55GMP18:05CJU01시간 10분일반석편도 117,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
대한항공17:05GMP18:15CJU01시간 10분일반석편도 104,500원~KB국민카드 결제시 1% 청구할인편도 104,460원~
대한항공17:15GMP18:25CJU01시간 10분일반석편도 104,500원~KB국민카드 결제시 1% 청구할인편도 104,460원~
대한항공17:15GMP18:25CJU01시간 10분비즈니스석편도 165,500원~KB국민카드 결제시 1% 청구할인편도 163,860원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립17:25GMP18:35CJU01시간 10분할인석편도 80,400원~네이버페이 결제시 1%+1,500원 적립편도 78,096원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립17:25GMP18:35CJU01시간 10분할인석편도 89,500원~네이버페이 결제시 1%+1,500원 적립편도 88,095원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립17:25GMP18:35CJU01시간 10분일반석편도 110,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립17:25GMP18:35CJU01시간 10분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
에어부산17:30GMP18:40CJU01시간 10분할인석편도 82,580원~
에어부산17:30GMP18:40CJU01시간 10분일반석편도 116,500원~
대한항공17:35GMP18:45CJU01시간 10분일반석편도 104,500원~KB국민카드 결제시 1% 청구할인편도 104,460원~
에어부산17:45GMP18:55CJU01시간 10분할인석편도 82,580원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립17:45GMP19:00CJU01시간 15분일반석편도 89,500원~네이버페이 결제시 1%+1,500원 적립편도 88,095원~
에어부산17:45GMP18:55CJU01시간 10분일반석편도 116,500원~
에어서울17:50GMP19:10CJU01시간 20분할인석편도 77,400원~
에어서울17:50GMP19:10CJU01시간 20분일반석편도 90,400원~KB국민카드 결제시 1% 청구할인편도 89,510원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:05GMP19:15CJU01시간 10분할인석편도 87,300원~네이버페이 결제시 1%+1,500원 적립편도 86,016원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:05GMP19:15CJU01시간 10분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
에어부산18:10GMP19:20CJU01시간 10분할인석편도 82,580원~
에어부산18:10GMP19:20CJU01시간 10분일반석편도 116,500원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:15GMP19:30CJU01시간 15분일반석편도 89,500원~네이버페이 결제시 1%+1,500원 적립편도 88,095원~
대한항공18:30GMP19:40CJU01시간 10분일반석편도 104,500원~KB국민카드 결제시 1% 청구할인편도 104,460원~
대한항공18:30GMP19:40CJU01시간 10분비즈니스석편도 165,500원~KB국민카드 결제시 1% 청구할인편도 163,860원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:35GMP19:45CJU01시간 10분할인석편도 89,500원~네이버페이 결제시 1%+1,500원 적립편도 88,095원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:35GMP19:45CJU01시간 10분일반석편도 110,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:35GMP19:45CJU01시간 10분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:45GMP19:55CJU01시간 10분할인석편도 80,400원~네이버페이 결제시 1%+1,500원 적립편도 78,096원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:45GMP19:55CJU01시간 10분일반석편도 109,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:45GMP19:55CJU01시간 10분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립18:45GMP19:55CJU01시간 10분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
대한항공18:50GMP20:00CJU01시간 10분할인석편도 76,500원~
대한항공18:50GMP20:00CJU01시간 10분비즈니스석편도 165,500원~KB국민카드 결제시 1% 청구할인편도 163,860원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립19:05GMP20:15CJU01시간 10분할인석편도 75,400원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 74,650원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립19:05GMP20:15CJU01시간 10분할인석편도 87,300원~네이버페이 결제시 1%+1,500원 적립편도 86,016원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립19:05GMP20:15CJU01시간 10분비즈니스석편도 97,400원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 95,440원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립19:05GMP20:15CJU01시간 10분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립19:05GMP20:15CJU01시간 10분일반석편도 117,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립19:15GMP20:20CJU01시간 05분할인석편도 78,400원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 77,620원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립19:15GMP20:25CJU01시간 10분할인석편도 79,500원~네이버페이 결제시 1%+1,500원 적립편도 78,195원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립19:15GMP20:25CJU01시간 10분일반석편도 110,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립19:15GMP20:20CJU01시간 05분일반석편도 117,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립19:15GMP20:25CJU01시간 10분비즈니스석편도 165,500원~네이버페이 결제시 1%+1,500원 적립편도 162,345원~
대한항공19:20GMP20:30CJU01시간 10분할인석편도 76,500원~
대한항공19:20GMP20:30CJU01시간 10분비즈니스석편도 165,500원~KB국민카드 결제시 1% 청구할인편도 163,860원~
에어서울19:25GMP20:45CJU01시간 20분할인석편도 83,400원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립19:25GMP20:35CJU01시간 10분할인석편도 87,300원~네이버페이 결제시 1%+1,500원 적립편도 86,016원~
에어서울19:25GMP20:45CJU01시간 20분일반석편도 90,400원~KB국민카드 결제시 1% 청구할인편도 89,510원~
티웨이항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립19:25GMP20:35CJU01시간 10분일반석편도 116,500원~네이버페이 결제시 1%+1,500원 적립편도 113,835원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립19:30GMP20:40CJU01시간 10분할인석편도 86,400원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 85,540원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립19:30GMP20:40CJU01시간 10분일반석편도 117,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:10GMP21:20CJU01시간 10분할인석편도 84,500원~네이버페이 결제시 1%+1,500원 적립편도 83,145원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:10GMP21:20CJU01시간 10분일반석편도 110,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:25GMP21:35CJU01시간 10분할인석편도 64,800원~네이버페이 결제시 1%+1,500원 적립편도 62,652원~
대한항공20:25GMP21:35CJU01시간 10분할인석편도 85,500원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:25GMP21:35CJU01시간 10분일반석편도 90,500원~네이버페이 결제시 1%+1,500원 적립편도 88,095원~
대한항공20:25GMP21:35CJU01시간 10분비즈니스석편도 165,500원~KB국민카드 결제시 1% 청구할인편도 163,860원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:30GMP21:45CJU01시간 15분할인석편도 64,800원~네이버페이 결제시 1%+1,500원 적립편도 62,652원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:30GMP21:45CJU01시간 15분일반석편도 90,500원~네이버페이 결제시 1%+1,500원 적립편도 88,095원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:40GMP21:50CJU01시간 10분할인석편도 64,800원~네이버페이 결제시 1%+1,500원 적립편도 62,652원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:40GMP21:50CJU01시간 10분일반석편도 90,500원~네이버페이 결제시 1%+1,500원 적립편도 88,095원~
대한항공20:45GMP21:55CJU01시간 10분할인석편도 76,500원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립20:50GMP22:00CJU01시간 10분할인석편도 68,400원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 67,720원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:50GMP22:00CJU01시간 10분할인석편도 74,500원~네이버페이 결제시 1%+1,500원 적립편도 73,245원~
아시아나항공1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립20:50GMP22:00CJU01시간 10분일반석편도 110,500원~네이버페이 결제시 1%+1,500원 적립편도 107,895원~
제주항공이벤트혜택KB국민카드 결제시 1% 청구할인 + 1,000원 적립20:50GMP22:00CJU01시간 10분일반석편도 117,000원~KB국민카드 결제시 1% 청구할인 + 1,000원 적립편도 114,840원~
대한항공21:05GMP22:15CJU01시간 10분할인석편도 66,500원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립21:05GMP22:15CJU01시간 10분할인석편도 70,600원~네이버페이 결제시 1%+1,500원 적립편도 68,394원~
진에어1%적립이벤트혜택네이버페이 결제시 1%+1,500원 적립21:05GMP22:15CJU01시간 10분일반석편도 90,500원~네이버페이 결제시 1%+1,500원 적립편도 88,095원~
총 180개의 항공권 정보를 불러왔습니다.

Process finished with exit code 0



2. 결과 데이터 가공하기

위와 같은 결과 데이터 중 필요한 정보만 얻기 위해 가공해야 합니다.
문자열을 가공하는 방법을 확인하려면 여기를 클릭하여 확인할 수 있습니다.




관련글 모아보기



python3.9 | camp-lee@naver.com


python3.9 | camp-lee@naver.com


python3.9 | camp-lee@naver.com

반응형
반응형

[셀레니움 응용] 네이버 항공권 검색 2편 달력 선택

파이썬 셀레니움을 사용하여 네이버 항공권 정보를 얻어오는 방법을 소개합니다.




목차:




1. 달력 Xpath 분석

유동적으로 날짜(월, 일)를 선택하기 위해 달력의 Html, Xpath를 분석합니다.
선택 값에 따라 변하는 규칙(패턴)을 파악하여 날짜를 선택할 수 있도록 합니다.


  1. 달력 1주 차의 요일 Xpath를 분석합니다.
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[1]/td[ 1 ]/button/b' #일
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[1]/td[ 2 ]/button/b' #월
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[1]/td[ 3 ]/button/b' #화
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[1]/td[ 4 ]/button/b' #수
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[1]/td[ 5 ]/button/b' #목
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[1]/td[ 6 ]/button/b' #금
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[1]/td[ 7 ]/button/b' #토
    • td[ ] 태그의 숫자가 일(1), 월(2), 화(3), 수(4), 목(5), 금(6), 토(7)의 값을 갖는 것을 확인할 수 있습니다.

  1. 달력의 n주 차의 Xpath를 분석합니다.
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[ 1 ]/td[1]/button/i' #1주차
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[ 2 ]/td[1]/button/i' #2주차
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[ 3 ]/td[1]/button/i' #3주차
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[2]/table/tbody/tr[ 4 ]/td[1]/button/i' #4주차
    • tr[ ] 태그의 숫자가 N 주차(N)의 값을 갖는 것을 확인할 수 있습니다.

  1. 달력의 월(month) Xpath를 분석합니다.
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[ 2 ]/table/tbody/tr[1]/td[1]/button/i' # 이번 달 작성일 기준 11월
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[ 3 ]/table/tbody/tr[1]/td[1]/button/i' # 다음 달 작성일 기준 12월
     '//*[@id="__next"]/div/div[1]/div[11]/div[2]/div[1]/div[2]/div/div[ 4 ]/table/tbody/tr[1]/td[1]/button/i' # 2달 후 작성일 기준 1월
    • div/div[ ] 태그의 숫자가 이번 달(2)부터 다음 달(3)의 순서로 값을 갖는 것을 확인할 수 있습니다.

달력 선택의 Xpath를 분석한 결과 /div[Month]/table/tbody/tr[Week]/td[Day] 임을 알 수 있습니다.




2. 날짜 선택하기

정해진 출발, 돌아올 날짜를 달력에서 선택

  • 검색 정확도를 높이기 위해 공항명이 아닌 공항코드 (IATA 3 Letter Airport Code)로 검색
  • 예를들어 "인천" 이 아닌 "ICN" 으로 검색
  • 다른 설명은 주석 참고
# 이 프로젝트에서는 왕복 항공권을 기준으로 작성되었습니다.
# selenium Ver : 3.14.1
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 웹드라이버 열기 (네이버 항공권)
driver = webdriver.Chrome()
driver.get("https://flight.naver.com/")
time.sleep(1)

# 입력칸에 출발지, 목적지를 입력하고 목록 중 첫번 째를 선택하는 함수
def airway(parts):
    for part in parts:
        # Xpath를 분석 > 출발지:button[1], 도착지:button[2]인 것을 반복문을 통해 간소화 list Index : 0, 1
        index = parts.index(part)
        driver.find_element_by_xpath(f'//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[1]/button[{int(index)+1}]').click()
        driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[1]/div/input').send_keys(part)
        time.sleep(0.1)
        driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[2]/section/div').click()
        time.sleep(0.5)
# 가는날, 오는날 선택하는 함수
def select_dates(month, week, day):
    print(f"week 번호 : {week}   요일 번호 : {day}")
    driver.find_element_by_xpath(f'//*[@id="__next"]/div/div[1]/div[9]/div[2]/div[1]/div[2]/div/div[{month}]/table/tbody/tr[{week}]/td[{day}]/button/b').click()
    time.sleep(0.1)

# 출발, 도착지 [김포, 제주]
ports = {'김포':'GMP','인천':'ICN','제주':'CJU','김해':'PUS','대구':'TAE'}
points = [ports['김포'],ports['제주']]
print(points)
airway(points)

# 가는 날 클릭
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[2]/button[1]').click()
time.sleep(1)

# 이번 달
month = 2
# 3주 차 // 2주 차 = 2 // 현재에 맞게 수정하세요.
week = 3
# 요일 선택
day_go = '토요일'
# 체류 기간
day_n_nights = 4

# 검색 할 요일 선택
days = ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일']
day = days.index(day_go)+1      # 선택한 요일
select_dates(month, week, day)  # 출발날짜 : select_dates 함수에 월, 주차, 요일 입력 후 클릭
day = day+day_n_nights-1        # 도착날짜 계산 > +체류 기간
# 체류기간에 따라 바뀌는 주(week) 계산
if day > 7:
    week+=day//7
    day = day%7
try:
    # 만약 체류 기간이 2개의 달(11월~12월)에 걸쳐있을 경우
    select_dates(month, week, day)
except:
    if week >= 4:
        month += 1
        week = 1
        select_dates(month, week, day)


관련글 모아보기



python3.9 | camp-lee@naver.com


python3.9 | camp-lee@naver.com


python3.9 | camp-lee@naver.com

반응형
반응형

[셀레니움 응용] 네이버 메일 보내기

파이썬 셀레니움을 사용하여 네이버 메일을 자동으로 보내는 방법을 소개합니다.




셀레니움 기초 네이버 로그인하기에 이어 메일보내는 방법입니다. 로그인 후 click, send_keys만으로 쉽게 메일을 보낼 수 있습니다.

  • 코드 설명이 필요하신 분들은 여기를 클릭해주세요.
# selenium Ver : 3.14.1
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import clipboard
import time

# 웹드라이버 열기 (네이버 메인 화면)
driver = webdriver.Chrome()
driver.get("https://www.naver.com/")

# 네이버 메인화면에서 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="account"]/a').click()
time.sleep(1)   # 1초 시간 지연

# 로그인 창에 아이디/비밀번호 입력
loginID = "로그인 ID"
clipboard.copy(loginID)
driver.find_element_by_xpath('//*[@id="id"]').send_keys(Keys.CONTROL, 'v')

loginPW = "로그인 PW"
clipboard.copy(loginPW)
driver.find_element_by_xpath('//*[@id="pw"]').send_keys(Keys.CONTROL, 'v')
time.sleep(1)

# 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="log.login"]').click()

# 네이버 메일 클릭
driver.find_element_by_xpath('//*[@id="NM_FAVORITE"]/div[1]/ul[1]/li[1]/a').click()
# 메일 쓰기 클릭
driver.find_element_by_xpath('//*[@id="nav_snb"]/div[1]/a[1]/strong').click()

time.sleep(1)

# 받는 사람
mail_to = '받는 사람 주소'
# 제목
mail_title = '제목'
# 내용
mail_cont = '내용'

driver.find_element_by_xpath('//*[@id="toInput"]').send_keys(mail_to)
driver.find_element_by_xpath('//*[@id="subject"]').send_keys(mail_title)
driver.find_element_by_xpath('//*[@id="subject"]').send_keys(Keys.TAB, mail_cont)

# 메일 보내기 버튼 클릭
driver.find_element_by_xpath('//*[@id="sendBtn"]').click()


python3.9 | camp-lee@naver.com

반응형
반응형

[셀레니움 응용] 네이버 항공권 검색 1편 출발지 도착지 선택

파이썬 셀레니움을 사용하여 네이버 항공권 정보를 얻어오는 방법을 소개합니다.




목차:




1. 네이버 항공권 페이지 열기

셀레니움을 처음 접하시면 여기를 클릭하여 설치 및 사용법을 확인하실 수 있습니다.


# 이 프로젝트에서는 왕복 항공권을 기준으로 작성되었습니다.
# selenium Ver : 3.14.1
from selenium import webdriver
from selenium.webdriver.common.keys 
import time
# 웹드라이버 열기 (네이버 항공권)
driver = webdriver.Chrome()
driver.get("https://flight.naver.com/")

홈페이지에서 크롬 검사도구를 사용하여 원하는 elements를 찾는 방법




2. 출발지 도착지 선택하기

Xpath를 이용해서 출발지와 도착지를 선택하는 방법

  1. 가장 간단하게 작성법
# 이 프로젝트에서는 왕복 항공권을 기준으로 작성되었습니다.
# selenium Ver : 3.14.1
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 웹드라이버 열기 (네이버 항공권)
driver = webdriver.Chrome()
driver.get("https://flight.naver.com/")

# 출발지 선택
departure = "GMP"  # 김포
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[1]/button[1]').click()
time.sleep(0.1)
# 출발지 입력
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[1]/div/input').send_keys(departure)
time.sleep(0.1)
# 목록 중 첫번 째 선택
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[2]/section/div').click()
time.sleep(0.5)

# 도착지 선택
destination = "CJU"  # 제주
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[1]/button[2]').click()
time.sleep(0.1)
# 출발지 입력
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[1]/div/input').send_keys(destination)
time.sleep(0.1)
# 목록 중 첫번 째 선택
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[2]/section/div').click()
time.sleep(0.5)

(TIP) 입력 칸 선택, 텍스트 입력, 목록 선택의 동일한 구조를 가지므로 함수로 작성하여 코드를 간소화 할 수 있습니다.


  1. 동일한 구조 함수로 묶기
# 이 프로젝트에서는 왕복 항공권을 기준으로 작성되었습니다.
# selenium Ver : 3.14.1
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 웹드라이버 열기 (네이버 항공권)
driver = webdriver.Chrome()
driver.get("https://flight.naver.com/")

# 입력칸에 출발지, 목적지를 입력하고 목록 중 첫번 째를 선택하는 함수
def airway(part):
    driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[1]/div/input').send_keys(part)
    time.sleep(0.1)
    driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[2]/section/div').click()
    time.sleep(0.5)

# 출발지 선택
departure = "GMP"  # 김포
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[1]/button[1]').click()
time.sleep(0.1)
# airway 함수 인수에 출발지 입력
airway(departure)

# 도착지 선택
destination = "CJU"  # 제주
driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[1]/button[2]').click()
time.sleep(0.1)
# airway 함수 인수에 도착지 입력
airway(destination)



3. 출발지 도착지 선택하기(간결한 코드)

반복되는 동일한 구조를 간결한 코드로 구성

# 이 프로젝트에서는 왕복 항공권을 기준으로 작성되었습니다.
# selenium Ver : 3.14.1
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 웹드라이버 열기 (네이버 항공권)
driver = webdriver.Chrome()
driver.get("https://flight.naver.com/")

#입력칸에 출발지, 목적지를 입력하고 목록 중 첫번 째를 선택하는 함수
def airway(parts):
    for part in parts:
        # Xpath를 분석 > 출발지:button[1], 도착지:button[2]인 것을 반복문을 통해 간소화 list Index : 0, 1
        index = parts.index(part)
        driver.find_element_by_xpath(f'//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[1]/button[{int(index)+1}]').click()
        time.sleep(0.1)
        driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[9]/div[1]/div/input').send_keys(part)
        time.sleep(0.1)
        driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div[4]/div/div/button/span').click()
        time.sleep(0.5)

# 출발, 도착지 {김포, 제주}
points = ['GMP', 'CJU']
airway(points)



관련글 모아보기



python3.9 | camp-lee@naver.com


python3.9 | camp-lee@naver.com


python3.9 | camp-lee@naver.com

반응형
반응형

[셀레니움 기초 4편] html 데이터 읽기 bs4

파이썬, 셀레니움을 사용하여 인터넷에 원하는 정보를 자동으로 스크랩하는 방법을 소개합니다.




목차:




1. BeautifulSoup 소개

html 정보를 파싱하는 도구

  • BeautifulSoup의 bs4 패키지를 사용하여 html을 분석하여 원하는 데이터를 얻을 수 있습니다.
  • 셀레니움, requests 패키지 등과 사용할 수 있습니다.
  • bs4 패키지 설치 pip install beautifulsoup4



2. 네이버 현재 상영작 정보 개발자 도구로 분석

네이버 현재상영작 검색 바로가기

  1. 네이버에서 현재상영작을 검색합니다.
  2. [F12] 또는 [우클릭 > 검사]개발자 도구 를 열어줍니다.
  3. 개발자 도구 를 사용해서 해당 영역의 html을 분석합니다.
    • ※ 어느 영역을 선택하느냐에 따라 결과가 달라질 수 있습니다.
    • ※ 중복되는 class name이 있을 수 있습니다.


  1. 해당 영역이 'data_box' 라는 class 로 묶여 있는 것을 확인할 수 있습니다.
  2. class name의 데이터를 텍스트형식으로 얻어보겠습니다.



3. 셀레니움 + html 파싱

class : data_box 의 텍스트 데이터를 추출해보겠습니다.

# selenium Ver : 3.14.1
from selenium import webdriver
# pip install beautifulsoup4
from bs4 import BeautifulSoup as bs

# 웹드라이버 열기 (네이버에 현재상영작 검색 URL)
url = "https://search.naver.com/search.naver?sm=tab_hty.top&query=현재상영작"
driver = webdriver.Chrome()
driver.get(url)

# 크롬드라이버의 현재 페이지의 url 얻기
page_url = driver.page_source
# 현재 url 주소의 html 데이터를 파싱
soup = bs(page_url, "html.parser")
movie_list = soup.find_all(class_='data_box')

# 8개의 영화 정보가 리스트로 저장되어 있습니다.
for movie_info in movie_list:
    print(movie_info.text)

결과 (날짜에 따라 결과가 다를 수 있습니다.)

   듄     개요 모험 155분   개봉 2021.10.20. 평점 8.33   출연  티모시 샬라메, 레베카 퍼거슨, 오스카 아이삭, 조슈 브롤린, 제이슨 모모아, 하비에르 바르뎀    
   베놈 2: 렛 데어 비 카니지     개요 액션 97분   개봉 2021.10.13. 평점 6.28   출연  톰 하디, 미셸 윌리엄스, 나오미 해리스, 레이드 스콧, 스테판 그레이엄, 우디 해럴슨    
   보이스     개요 범죄 109분   개봉 2021.09.15. 평점 8.43   출연  변요한, 김무열, 김희원, 박명훈, 이주영, 조재윤    
   007 노 타임 투 다이     개요 액션 163분   개봉 2021.09.29. 평점 7.09   출연  다니엘 크레이그, 라미 말렉, 라샤나 린치, 레아 세이두, 벤 위쇼, 아나 디 아르마스    
   라스트 듀얼: 최후의 결투     개요 액션 152분   개봉 2021.10.20. 평점 9.80   출연  맷 데이먼, 아담 드라이버, 조디 코머, 벤 애플렉, 해리엇 월터, 나다니엘 파커    
   기적     개요 드라마 117분   개봉 2021.09.15. 평점 9.11   출연  박정민, 이성민, 윤아, 이수경, 김강훈, 정문성    
   노회찬6411     개요 다큐멘터리 127분   개봉 2021.10.14. 평점 9.30   출연  노회찬    
   한창나이 선녀님     개요 다큐멘터리 83분   개봉 2021.10.20. 평점 10.00   출연  임선녀  



4. requests + html 파싱

pip install requests

# selenium Ver : 3.14.1
# pip install beautifulsoup4
from bs4 import BeautifulSoup as bs
# pip install request
import requests

# 네이버에 현재상영작 검색 바로가기 URL
url = "https://search.naver.com/search.naver?sm=tab_hty.top&query=현재상영작"
response = requests.get(url)

# 상태체크 "200" : "정상", 정상일 경우 파싱
if response.status_code == 200:
    html = response.text
    soup = bs(html, "html.parser")
    movie_list = soup.find_all(class_='data_box')

    # 8개의 영화 정보가 리스트로 저장되어 있습니다.
    for movie_info in movie_list:
        print(movie_info.text)

결과 (날짜에 따라 결과가 다를 수 있습니다.)

   듄     개요 모험 155분   개봉 2021.10.20. 평점 8.33   출연  티모시 샬라메, 레베카 퍼거슨, 오스카 아이삭, 조슈 브롤린, 제이슨 모모아, 하비에르 바르뎀    
   베놈 2: 렛 데어 비 카니지     개요 액션 97분   개봉 2021.10.13. 평점 6.28   출연  톰 하디, 미셸 윌리엄스, 나오미 해리스, 레이드 스콧, 스테판 그레이엄, 우디 해럴슨    
   보이스     개요 범죄 109분   개봉 2021.09.15. 평점 8.43   출연  변요한, 김무열, 김희원, 박명훈, 이주영, 조재윤    
   007 노 타임 투 다이     개요 액션 163분   개봉 2021.09.29. 평점 7.09   출연  다니엘 크레이그, 라미 말렉, 라샤나 린치, 레아 세이두, 벤 위쇼, 아나 디 아르마스    
   라스트 듀얼: 최후의 결투     개요 액션 152분   개봉 2021.10.20. 평점 9.80   출연  맷 데이먼, 아담 드라이버, 조디 코머, 벤 애플렉, 해리엇 월터, 나다니엘 파커    
   기적     개요 드라마 117분   개봉 2021.09.15. 평점 9.11   출연  박정민, 이성민, 윤아, 이수경, 김강훈, 정문성    
   노회찬6411     개요 다큐멘터리 127분   개봉 2021.10.14. 평점 9.30   출연  노회찬    
   한창나이 선녀님     개요 다큐멘터리 83분   개봉 2021.10.20. 평점 10.00   출연  임선녀  




[셀레니움 기초 1편] 패키지 설치 및 웹페이지 열기
[셀레니움 기초 2편] 텍스트 입력 | 버튼 클릭 | 페이지 이동
[셀레니움 기초 3-1편] 네이버 자동 로그인
[셀레니움 기초 3-2편] 쿠팡 자동 로그인
[셀레니움 기초 4편] html 데이터 읽기 bs4


python3.9 | camp-lee@naver.com

반응형
반응형

[셀레니움 기초 3-2편] 쿠팡 자동 로그인

파이썬, 셀레니움을 사용하여 인터넷에 원하는 정보를 자동으로 스크랩하는 방법을 소개합니다.




목차:




1. 셀레니움 패키지 설치

이 번 포스팅에서는 selenium 3.14.1 버전을 사용합니다.




2. 예제

쿠팡 로그인

  • 아래의 코드를 붙여넣고 아이디, 비밀번호를 수정합니다.
# selenium Ver : 3.14.1
from selenium import webdriver
import time

# 웹드라이버 열기 (쿠팡)
driver = webdriver.Chrome()
#
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
                       { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ })
driver.get("https://www.coupang.com/")
time.sleep(1)
# 쿠팡 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="login"]/a').click()
time.sleep(1)

# 로그인 창에 아이디/비밀번호 입력
driver.find_element_by_xpath('//*[@id="login-email-input"]').send_keys("아이디")
time.sleep(1)
driver.find_element_by_xpath('//*[@id="login-password-input"]').send_keys("비밀번호")
time.sleep(1)

# 로그인 버튼 클릭
driver.find_element_by_xpath('/html/body/div[1]/div/div/form/div[5]/button').click()



  • 1. 크롬 검사도구를 사용해 xpath, id 등 elements를 얻을 수 있고 element에 맞게 수정해서 사용할 수 있습니다.
    • 이 예제에선 Xpath를 사용했습니다.
      #다양한 find_element_by_ 들을 사용할 수 있습니다.
      driver.find_element_by_xpath(self, xpath)
      driver.find_element_by_css_selector(self, css_selector)
      driver.find_element_by_class_name(self, name)
      driver.find_element_by_link_text(self, link_text)
      driver.find_element_by_name(self, name)
      driver.find_element_by_id(self, id_)
      driver.find_element_by_tag_name(self, id_)
      driver.find_element_by_partial_link_text(self, link_text)



[셀레니움 기초 1편] 패키지 설치 및 웹페이지 열기
[셀레니움 기초 2편] 텍스트 입력 | 버튼 클릭 | 페이지 이동
[셀레니움 기초 3-1편] 네이버 자동 로그인
[셀레니움 기초 3-2편] 쿠팡 자동 로그인
[셀레니움 기초 4편] html 데이터 읽기 bs4


python3.9 | camp-lee@naver.com

반응형
반응형

[셀레니움 기초 3-1편] 네이버 자동 로그인

파이썬, 셀레니움을 사용하여 인터넷에 원하는 정보를 자동으로 스크랩하는 방법을 소개합니다.




목차:




1. 셀레니움 패키지 설치

이 번 포스팅에서는 selenium 3.14.1 버전을 사용합니다.




2. 클립보드 패키지 설치

네이버는 로그인 시 로봇 입력 방지 'captcha' 때문에 클립보드(복사)를 거쳐 ID PW를 입력해야하므로 필요합니다.




3. 예제

네이버 로그인

  • 아래의 코드를 붙여넣고 아이디, 비밀번호를 수정합니다.
# selenium Ver : 3.14.1
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import clipboard
import time

# 웹드라이버 열기 (네이버 메인 화면)
driver = webdriver.Chrome()
driver.get("https://www.naver.com/")

# 네이버 메인화면에서 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="account"]/a').click()
time.sleep(1)   # 1초 시간 지연

# 로그인 창에 아이디/비밀번호 입력
loginID = "아이디"
clipboard.copy(loginID)
driver.find_element_by_xpath('//*[@id="id"]').send_keys(Keys.CONTROL, 'v')

loginPW = "비밀번호"
clipboard.copy(loginPW)
driver.find_element_by_xpath('//*[@id="pw"]').send_keys(Keys.CONTROL, 'v')
time.sleep(1)

# 로그인 버튼 클릭
driver.find_element_by_xpath('//*[@id="log.login"]').click()
  • 네이버 로그인의 경우 로봇 입력 방지 captcha를 우회하기 위해 클립보드에 복사, 입력 칸에 붙여넣기 방식을 사용하였습니다. 다른 사이트의 경우, xpath.send_key("ID/PW") 적용할 수 있습니다.

  • 1. 크롬 검사도구를 사용해 xpath, id 등 elements를 얻을 수 있고 element에 맞게 수정해서 사용할 수 있습니다.

    • 이 예제에선 Xpath를 사용했습니다.
      #다양한 find_element_by_ 들을 사용할 수 있습니다.
      driver.find_element_by_xpath(self, xpath)
      driver.find_element_by_css_selector(self, css_selector)
      driver.find_element_by_class_name(self, name)
      driver.find_element_by_link_text(self, link_text)
      driver.find_element_by_name(self, name)
      driver.find_element_by_id(self, id_)
      driver.find_element_by_tag_name(self, id_)
      driver.find_element_by_partial_link_text(self, link_text)



[셀레니움 기초 1편] 패키지 설치 및 웹페이지 열기
[셀레니움 기초 2편] 텍스트 입력 | 버튼 클릭 | 페이지 이동
[셀레니움 기초 3-1편] 네이버 자동 로그인
[셀레니움 기초 3-2편] 쿠팡 자동 로그인
[셀레니움 기초 4편] html 데이터 읽기 bs4


python3.9 | camp-lee@naver.com

반응형
반응형

[셀레니움 기초 2편] 텍스트 입력 | 버튼 클릭 | 페이지 이동

파이썬, 셀레니움을 사용하여 인터넷에 원하는 정보를 자동으로 스크랩하는 방법을 소개합니다.



목차:




1 크롬 검사도구 사용법

  1. 텍스트 입력, 버튼 클릭을 하고자하는 위치에 우클릭을 합니다.
  2. 우클릭 메뉴 중 검사를 클릭합니다.
  3. 검사도구의 항목을 찾아 우클릭 합니다.
  4. Xpath를 복사합니다. (Copy ▶ Copy Xpath)

  1. 마우스 커서 버튼을 사용하여 각 지점의 HTML 정보를 쉽게 확인할 수 있습니다.



2 텍스트 입력 버튼 클릭

Naver셀레니움 웹크롤링를 검색을 해보겠습니다.

네이버검색창의 Xpath와 검색 버튼의 Xpath를 저장하여 검색창에 텍스트 입력, 검색 버튼 클릭을 해보겠습니다.

# selenium Ver : 3.14.1
from selenium import webdriver

# 네이버 URL
url = "https:naver.com"
# 네이버 검색창 Xpath
xpath_text = '//*[@id="query"]'
# 검색하기 버튼
xpath_button = '//*[@id="search_btn"]'
# 검색할 내용
keyword = "셀레니움 웹크롤링"


# 웹드라이버 열기
driver = webdriver.Chrome()
driver.get(url)

# 검색 창에 keyword 입력
driver.find_element_by_xpath(xpath_text).send_keys(keyword)
# 검색 버튼 클릭하기기
driver.find_element_by_xpath(xpath_button).click()

이 방법을 사용해서 웹드라이버에서 텍스트 입력, 버튼 클릭을 할 수 있습니다.
같은 방법으로 find_element_by_xpath 이 외에 다른 것을 사용할 수 있습니다.




3 페이지 이동

셀레니움 웹크롤링을 검색하기 위해 텍스트를 입력하고 버튼을 클릭하였습니다. 이 방법 이 외에 URL을 분석하여 처음에 사용하였던 driver.get(url) 함수를 사용하여 페이지를 이동할 수 있습니다.

# selenium Ver : 3.14.1
from selenium import webdriver

# 네이버 "셀레니움 웹크롤링" 검색 결과 URL
url = "https://search.naver.com/search.naver?where=nexearch&query="
keyword = "셀레니움+웹크롤링"

# 웹드라이버 열기
driver = webdriver.Chrome()
driver.get(url+keyword)




[셀레니움 기초 1편] 패키지 설치 및 웹페이지 열기
[셀레니움 기초 2편] 텍스트 입력 | 버튼 클릭 | 페이지 이동
[셀레니움 기초 3-1편] 네이버 자동 로그인
[셀레니움 기초 3-2편] 쿠팡 자동 로그인
[셀레니움 기초 4편] html 데이터 읽기 bs4


python3.9 | camp-lee@naver.com

반응형
반응형

[셀레니움 기초 1편] 패키지 설치 및 웹페이지 열기

파이썬, 셀레니움을 사용하여 인터넷에 원하는 정보를 자동으로 스크랩하는 방법을 소개합니다.



목차:




1. Chrome Webdriver 다운로드 받기

  1. 사용자의 Chrome 주소창에 Chrome://version을 입력한 뒤 이동합니다.
  2. 크롬 버전을 확인합니다.(9x.x.xxxx.xx)
  3. 다운로드 링크에서 버전에 맞는 웹드라이버를 사용자의 OS에 맞게 다운로드 합니다.
  4. 크롬 웹드라이버를 프로젝트 main.py가 있는 폴더로 이동합니다.



2. 웹페이지 열기

  1. 파이썬 셀레니움 모듈을 설치합니다.

  2. 파이썬에 페이지를 띄우는 코드를 입력합니다.

from selenium import webdriver
# 열고자 하는 url 입력
url = "https://camplee.tistory.com/"
# chromedriver.exe 가 main.py와 같은 폴더에 있을 시, path 생략 가능
path = "chromedriver.exe"

browser = webdriver.Chrome(path)
browser.get(url)
  • 크롬드라이버가 홈페이지가 정상적으로 띄운 것을 확인합니다.
    만약 홈페이지가 뜨지 않는다면 여기 단계를 다시 시도해보세요.




[셀레니움 기초 1편] 패키지 설치 및 웹페이지 열기
[셀레니움 기초 2편] 텍스트 입력 | 버튼 클릭 | 페이지 이동
[셀레니움 기초 3-1편] 네이버 자동 로그인
[셀레니움 기초 3-2편] 쿠팡 자동 로그인
[셀레니움 기초 4편] html 데이터 읽기 bs4


python3.9 | camp-lee@naver.com

반응형

+ Recent posts