본문 바로가기
프로젝트/SRT&KTX 매진표 예매

SRT&KTX 기차표 매크로 예매 - (9) KTX 역 리스트 조회

by 매크로메이커 2024. 1. 15.

SRT에서 역 조회를 자동으로 해온것과 비슷하게, KTX역도 자동으로 불러오게 만들자.

 

역 정보가 있을것만 같은 버튼

기차표 조회창에서 역 변경을 누르면 기차역 리스트 팝업을 확인할 수 있다.

기차역 리스트

여기서 분홍표시된 역들이 KTX 정차역이다. 우리는 KTX가 아닌 일반 열차에는 관심이 없으므로, 이 역들만 뽑아내자.

역 소스코드

소스코드를 보면 예쁘게도 KTX 정차역이 분리되어 나온다. class가 bg03이거나 title이 'KTX 정차역'인 리스트를 뽑으면 된다.

 

title이 'KTX 정차역'인 리스트를 뽑으려 했는데.. 청량리역이 안잡혀서 클래스로 잡는다...(개발 상태가..)

 

def fetch_stations(self):
    result = dict()
    try:
        res = self.session.get("https://www.letskorail.com/ebizprd/EbizPrdTicketPr11100/searchTnCode.do")
    except Exception as e:
        self.error_callback('KTX 역 조회 실패', f"HTTP 요청에 실패했습니다 - \n{e}")
        return result
    # print(res.text)
    try:
        soup = BeautifulSoup(res.text, 'html.parser')
        stations = soup.find_all("td", {"class": re.compile(r'bg03')})

        for station in stations:
            station = station.find("a")
            station_split = station['href'].split("'")
            result[station_split[1]] = station_split[3]
    except Exception as e:
        self.error_callback('KTX 역 조회 실패', f"파싱에 실패했습니다 - \n{e}")
    return result

 

result를 출력해보면 아래와 같이 잘 잡힌당

{'서울': '0001', '용산': '0104', '영등포': '0002', '광명': '0501', '수원': '0003', '천안아산': '0502', '오송': '0297', '대전': '0010', '서대전': '0025', '김천구미': '0507', '동대구': '0015', '포항': '0515', '밀양': '0017', '구포': '0019', '부산': '0020', '경주(신경주)': '0508', '울산(통도사)': '0509', '마산': '0059', '창원중앙': '0512', '경산': '0024', '논산': '0027', '익산': '0030', '정읍': '0033', '광주송정': '0036', '목포': '0041', '전주': '0045', '순천': '0051', '여수EXPO': '0053', '청량리': '0090', '강릉': '0115', '행신': '0390', '정동진': '0262'}

 

풀 코드는 깃허브로..!