본문 바로가기

Python/실습

[파이썬으로 영화 예매 오픈 알리미 만들기] 1. 웹 크롤링

인프런 강좌 - 파이썬으로 영화 예매 오픈 알리미 만들기 / 한승우

https://www.inflearn.com/course/%EC%98%81%ED%99%94%EC%98%88%EB%A7%A4-%ED%8C%8C%EC%9D%B4%EC%8D%AC#

 

파이썬으로 영화 예매 오픈 알리미 만들기 - 인프런

파이썬을 통해 웹 크롤링, 텔레그램 봇, AWS EC2를 이용하여 CGV 용산아이파크몰의 IMAX 영화 예매 오픈 알리미를 만들어보는 강좌입니다. 이 강좌를 통해, 웹 크롤링에 대한 기본적인 이해부터, 텔레그램 봇을 만들어서 서버로 구축하는 과정까지 학습하실 수 있습니다! 입문 초급 웹 개발 서버 프로그래밍 언어 서비스 개발 파이썬 온라인 강의 파이썬, 영화예매, 오픈알리미

www.inflearn.com

실습시 작성한 코드는 아래 github에 올려두었습니다.

https://github.com/JisunParkRea/python_movie_open_alarm

 

JisunParkRea/python_movie_open_alarm

Contribute to JisunParkRea/python_movie_open_alarm development by creating an account on GitHub.

github.com

 

목표

cgv용산아이파크몰에서 상영되는 영화 예매가 오픈되었다는 것을 알려줄 수 있는 텔레그램 봇 만들기

- 파이썬 웹 크롤링

- 텔레그램 봇 만들기

- 스케쥴러 사용

 

개발 환경

- Windows 10 Home

- Python 3.8

 

 

 

예매 오픈 알리미 만들기(웹 크롤링)

먼저, 크롤링을 위한 파이썬 라이브러리(bs4, requests)를 설치하자

> pip install bs4 requests

 

Chrome으로 cgv 홈페이지(http://www.cgv.co.kr/) - 극장 - cgv용산아이파크몰 페이지로 들어간다.

Chrome에 있는 개발자도구(Ctrl + Shift + I)로 해당 페이지의 html코드를 확인할 수 있다.

 

URL만 있으면 requests 모듈을 통해 요청하고 응답을 받아서 사용할 수 있다.

그리고 여기서 우리가 필요한 부분은 영화 상용시간표이다.

그렇기에, html코드를 통해 해당 부분의 URL을 찾아보자.

 

이 부분이 상용시간표의 코드

위의 화면에서 알 수 있다시피

cgv의 상용시간표는 iframe 태그를 통해서 다른 웹페이지 형태로 넣어져있다.

그래서 src부분을 복사해서 cgv 루트 도메인에 붙여넣기하면

다음과 같은 상영시간표 페이지만을 얻을 수 있다.

 

이제 request로 페이지 정보를 가져와보자.

이렇게 url을 이용하여 request 모듈을 통한 get 요청으로 html 텍스트 부분을 출력할 수 있다.

url 쿼리 스트링의 date부분만 바꿔주면 원하는 날짜의 정보를 가져오는 것이 가능하다.

여기서는 2020년 2월 26일의 상영시간표를 가져와봤다.

 

 

 

 

bs4로 상영시간표 영화 제목 크롤링하기

bs4 사용법을 익히기 위한 가장 좋은 방법은

공식 문서를 보는 것!

https://www.crummy.com/software/BeautifulSoup/bs4/doc/

 

Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation

Non-pretty printing If you just want a string, with no fancy formatting, you can call unicode() or str() on a BeautifulSoup object, or a Tag within it: str(soup) # ' I linked to example.com ' unicode(soup.a) # u' I linked to example.com ' The str() functio

www.crummy.com

 

크롤링에 사용하는 대표적 메소드 2가지

1. find()

2. select()

이 두개의 기능은 똑같다.

html의 요소에서 자신이 원하는 ID나 클래스값에 해당하는 태그에 대한 정보를 가져오는 역할.

 

여기서는 select() 메소드를 사용할 것.

CSS selectors의 select() 메소드 공식문서

 

영화 제목들을 뽑아내기 위해 다시 크롬의 개발자 도구를 이용하여 제목에 해당하는 html코드 부분을 확인.

제목까지의 html요소들 복사하는 방법

 

그리고 select_one() 메소드에 복사한 요소를 넣은 파이썬 코드를 통해 확인해보면

select_one() 메소드로 제목 하나만 추출

다음과 같이 제목의 html코드를 확인할 수 있다.

 

그러나 우리는 전체 제목을 가져와야 하기 때문에 다음과 같이 코드를 수정하자.

수정된 코드

* select() 메소드로 전체를 가져와서 그 중 text만 뽑아내어 strip()으로 공백 제거

 

 

 

 

IMAX 영화 예매 오픈 여부 크롤링하기

우리가 필요한 정보는 크게 2가지이다.

1. IMAX 오픈 여부

2. 어떤 영화가 IMAX관이 오픈되는지

 

cgv는 IMAX 상영 여부span 태그를 통해서 나타낸다.

즉, span 태그가 존재하면 IMAX가 상영되고 있다는 것을 알 수 있다. (구글 개발자도구에서 확인 가능)

 

movie_crawler.py 파일을 새로 만들고 다음과 같이 코드를 작성해보자.

강의 중간 캡쳐 (태그 참고 자료)

 

 

예매 오픈된 IMAX 영화 제목 크롤링하기

IMAX관이 오픈이 되면

우리는 거꾸로

IMAX관이 오픈된 영화의 제목을 가져와야 한다.

그러기 위해서는 find_parent() 메소드를 통해 검색을 하도록 한다.

 

movie_crawler.py 파일의 코드를 다음과 같이 수정해보자.

col-times 클래스까지 올라갔다 다시 제목 찾기

 

이제 다음 챕터에서는 주기적으로 이를 호출하고 알리는 텔레그램 봇을 만들어보자.

 

끝!