네이버 항공권 정보 크롤링을 위한 과정을 상세하게 정리하겠습니다. 아래는 크롤링 과정을 단계별로 나눈 것입니다.
단계 1: 필요한 라이브러리 가져오기
먼저, 크롤링을 위해 필요한 라이브러리를 가져옵니다. 이 과정에서 selenium
과 BeautifulSoup
를 사용합니다. selenium
은 웹 브라우저 자동화를 위해 사용되며, BeautifulSoup
은 HTML 문서를 파싱하기 위해 사용됩니다.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import time
단계 2: 크롬 드라이버 설정 및 웹 페이지 열기
크롤링할 웹 페이지를 불러오기 위해 크롬 드라이버를 설정하고 웹 페이지를 엽니다. 크롬 드라이버는 본인의 운영체제에 맞는 버전을 다운로드하고 설치해야 합니다. 아래는 크롬 드라이버를 설정하는 예시 코드입니다.
driver = webdriver.Chrome(executable_path='크롬 드라이버 설치 경로')
driver.get('데이터 가져오려는 네이버 항공권 사이트 URL')
단계 3: 스크롤 다운
네이버 항공권 페이지에서 데이터를 가져오기 위해 스크롤을 내려야 합니다. 아래 코드는 페이지의 끝까지 스크롤을 내리는 예시입니다.
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2) # 스크롤 이동 후 잠시 대기
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
단계 4: 페이지 소스 가져오기
스크롤을 내리면서 모든 데이터가 로딩되었다고 가정하고, 이제 페이지 소스를 가져와서 파싱할 준비를 합니다.
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')
단계 5: 원하는 정보 추출
BeautifulSoup을 사용하여 필요한 정보를 추출합니다. 예를 들어, 항공권 정보를 추출하는 코드는 다음과 같을 수 있습니다.
flight_info = []
items = soup.find_all('div', class_='flight_item') # 항공권 정보가 들어있는 요소를 찾습니다.
for item in items:
company = item.find('div', class_='h_result').find('span', class_='h_tit_resultng-binding').get_text()
ticket_type = item.find('div', class_='txt_seatng-binding').get_text()
price = item.find('div', class_='txt_total').find('span', class_='txt_payng-binding').get_text().replace(',', '')
flight_info.append({
'company': company,
'ticket_type': ticket_type,
'price': price
})
# flight_info에는 추출한 항공권 정보가 리스트로 저장됩니다.
단계 6: 크롬 드라이버 종료
크롤링이 완료되면 크롬 드라이버를 종료합니다.
driver.quit()
이러한 과정을 통해 네이버 항공권 정보를 크롤링할 수 있습니다. 당연히 네이버 사이트의 구조가 변경될 수 있으므로 필요에 따라 코드를 업데이트하실 필요가 있을 것입니다.
수집한 데이터를 JSON 형식으로 변환하여 저장하려면 Python의 json
라이브러리를 사용하면 됩니다.
아래는 수집한 항공권 정보를 JSON 형태로 저장하는 예시 코드입니다.
import json
# 수집한 항공권 정보가 담긴 리스트 (예시)
flight_info = [
{
'company': 'Korean Air',
'ticket_type': 'Economy',
'price': '500000',
},
{
'company': 'Asiana Airlines',
'ticket_type': 'Business',
'price': '1200000',
},
# 나머지 항공권 정보들...
]
# 정보를 JSON 형태로 저장
with open('flight_info.json', 'w', encoding='utf-8') as json_file:
json.dump(flight_info, json_file, ensure_ascii=False, indent=4)
# flight_info.json 파일에 수집된 정보가 저장됩니다.
위 코드에서 json.dump()
함수를 사용하여 Python 딕셔너리 형태의 데이터를 JSON 파일로 저장합니다. JSON 파일은 나중에 필요한 경우 데이터를 다시 읽어올 때 유용하게 사용될 수 있습니다.
수집된 JSON 값을 기록하고, 새로운 정보가 나오거나 변경되는 경우 카카오톡 메시지를 보내려면 다음과 같은 단계를 따를 수 있습니다. 이를 위해 kakao-bot-python
라이브러리를 사용하여 카카오톡 봇을 구현할 것입니다.
단계 1: kakao-bot-python
라이브러리 설치
먼저 kakao-bot-python
라이브러리를 설치합니다. 이 라이브러리를 사용하면 카카오톡 메시지를 보낼 수 있습니다.
pip install kakao-bot-python
단계 2: 카카오톡 봇 생성
카카오톡 봇을 생성하고 봇의 API 키를 얻어야 합니다. 카카오톡 비즈 메시지에서 봇을 생성하고 API 키를 발급받으세요.
단계 3: JSON 데이터 저장 및 비교
JSON 데이터를 저장하고, 새로운 정보가 나오거나 변경될 때마다 이전 데이터와 비교합니다.
새로운 정보가 나타났다고 가정하고 다음과 같이 코드를 작성합니다.
import json
from kakaobot import KakaoBot
# 이전 JSON 파일에서 데이터 로드 (첫 번째 실행 시 파일이 없을 수 있음)
try:
with open('previous_flight_info.json', 'r', encoding='utf-8') as json_file:
previous_flight_info = json.load(json_file)
except FileNotFoundError:
previous_flight_info = []
# 현재 수집된 항공권 정보 (예시)
current_flight_info = [
{
'company': 'Korean Air',
'ticket_type': 'Economy',
'price': '550000',
},
{
'company': 'Asiana Airlines',
'ticket_type': 'Business',
'price': '1200000',
},
# 나머지 항공권 정보들...
]
# 새로운 정보가 나타나거나 기존 정보가 변경되었는지 확인
new_info = []
for current_info in current_flight_info:
if current_info not in previous_flight_info:
new_info.append(current_info)
# 새로운 정보가 있을 때만 메시지 전송
if new_info:
# JSON 파일에 현재 정보 저장
with open('previous_flight_info.json', 'w', encoding='utf-8') as json_file:
json.dump(current_flight_info, json_file, ensure_ascii=False, indent=4)
# 카카오톡 봇 초기화
bot = KakaoBot('YOUR_API_KEY') # 여기에 봇의 API 키를 입력하세요.
# 메시지 보내기
message = "새로운 항공권 정보가 있습니다:\n"
for info in new_info:
message += f"{info['company']} - {info['ticket_type']} - {info['price']} 원\n"
# 수신자의 카카오톡 ID를 입력하세요.
receiver_id = 'RECEIVER_KAKAO_ID'
bot.send_message(receiver_id, message)
주의:
previous_flight_info.json
파일은 이전 정보를 저장하는 데 사용됩니다. 첫 번째 실행 시 파일이 없을 수 있으므로 예외 처리를 해주어야 합니다.KakaoBot
클래스를 사용하여 카카오톡 메시지를 보낼 수 있습니다. 봇의 API 키를YOUR_API_KEY
부분에 입력하세요.receiver_id
를 수신자의 카카오톡 ID로 변경해야 합니다.- 새로운 정보가 나타날 때마다 메시지를 보내므로, 이 코드를 주기적으로 실행하거나 원하는 시점에 호출하도록 설정해야 합니다.
이제 위 코드를 사용하여 새로운 항공권 정보가 나타나면 카카오톡 메시지를 보낼 수 있습니다.
댓글