CGV 상영시간표 알리
CGV 상영시간표 알리미
를 만들어보자!
나만의 내가 나를위해 기록하는 개발일지 삽질일지
언제 오픈될지 모르는 CGV의 상영시간표! 언제 열리나 전전긍긍하며 수시로 들락날락… 그만합시다!
무엇이 필요할까
- 영화관 데이터 가져오기
- 상영정보 크롤링
- 자동화 크롤러
- 크롤링 서버
- ios 앱
상영정보 크롤링
11월 21일
우선 정보를 가져올 수 있어야 시작이 가능하겠지?
… 태어나 처음해보는 크롤링 …
웹 크롤링에 대해 검색하니 BeautifulSoup를 사용해 정보를 가져올 수 있겠다!
BeautifulSoup
html 코드를 Python이 이해하는 객체 구조로 변환해주는 Parser!
네이버 인기검색어 크롤링
import requests
from bs4 import BeautifulSoup
html = requests.get('https://naver.com/').text
soup = BeautifulSoup(html, 'html.parser')
title_list = soup.select('.PM_CL_realtimeKeyword_rolling span[class*=ah_k]')
for idx, title in enumerate(title_list, 1):
print(idx, title.text)
CSS Selector를 사용해 정보를 가져왔다.
.PM은 PM이라는 글자가 들어가는
.PM li 는 PM class 밑에 속해 있는 li
.PM > li 는 PM class의 직계 li
웹 구조는 변할 수 있으니 범위를 너무 구체적으로 잡지 않도록 주의한다!
생각보다 할만한데…?
야심차게 cgv 홈페이지도 마찬가지 방법으로 시도!
하지만 정보가 나오지 않는다… 왜지?
BeautifulSoup를 사용한 크롤링은 검사에서 나오는 html에서가 아니라 페이지 소스를 봐야한다!
아니나다를까 페이지 소스를 보니 없다
상영시간표 정보는 html = http://www.cgv.co.kr/reserve/~ 가 아니라
http://www.cgv.co.kr/common/showtimes/iframeTheater.aspx? 위의 주소에서 얻을 수 있다.
검색 링크를 좀 더 쪼개보았다.
# 상영시간표
default_cgv = 'http://www.cgv.co.kr/common/showtimes/iframeTheater.aspx?'
'''
지역코드::
서울: 01 경기: 02 인천: 202 강원: 12 대전&충청: 03%2C205 대구: 11 부산/울산: 05 경상: 204 광주/전라/제주: 206
'''
area = 'areacode=202&'
theater = 'theatercode=0002&'
date = 'date=20181121'
이를 활용해서
cgvTime_html = requests.get(default_cgv + area + theater + date).text
cgvTime_soup = BeautifulSoup(cgvTime_html, 'html.parser')
movie_info = cgvTime_soup.select(".sect-showtimes .info-movie")
movie_title = cgvTime_soup.select(".sect-showtimes .info-movie strong")
# 영화 제목
for title in movie_title:
print(title.text)
movie_time = cgvTime_soup.select(".sect-showtimes .info-timetable li a")
for time in movie_time:
# print(time)
print("상영시간:",time['data-playstarttime'])
print("상영관:", time['data-screenkorname'])
print("잔여좌석:", time['data-seatremaincnt'])
print("====================================")
코드가 너무 조잡하고… 주먹구구식이지만… 이렇게 상영시간표 정보는 얼추 가져올 수 있었다.
영화관 데이터 가져오기
11월 25일
위의 방법은 영화관을 선택해 들어간 페이지에서 가져오는 방법이다.
영화관정보를 일일이 CGV 영화관 정보를 입력할 수 없으니 우선 영화관 이름부터 가져와야겠다.
코드를 뜯어보니…
script 정보를 가져와서 영화관 정보를 얻어야겠다.
자바스크립트는 정규표현식
import re # 정규표현식
을 이용해 가져올 수 있다.
matched = re.search(r'var theaterJsonData = (.*?);', html, re.S)
# .: 모든, *: 문자열 ?: 0회이상, 1회 이하 // 즉 .*? : 0번째 모든문자열
// {"AreaTheaterDetailList":[{"RegionCode":"01","TheaterCode":"0056","TheaterName":"CGV강남","TheaterName_ENG":null,"IsSelected":true}, ...
다음과 같이 json 데이터를 가져왔는데 이를 보기좋게 출력해야겠다.
파이썬 문법을 더 공부해서 해야할듯…
법적으로 문제는 없나요?
답글삭제