인프런 강좌 - 파이썬으로 영화 예매 오픈 알리미 만들기 / 한승우
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#
실습시 작성한 코드는 아래 github에 올려두었습니다.
https://github.com/JisunParkRea/python_movie_open_alarm
목표
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/
크롤링에 사용하는 대표적 메소드 2가지는
1. find()
2. select()
이 두개의 기능은 똑같다.
html의 요소에서 자신이 원하는 ID나 클래스값에 해당하는 태그에 대한 정보를 가져오는 역할.
여기서는 select() 메소드를 사용할 것.
영화 제목들을 뽑아내기 위해 다시 크롬의 개발자 도구를 이용하여 제목에 해당하는 html코드 부분을 확인.
그리고 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 파일의 코드를 다음과 같이 수정해보자.
이제 다음 챕터에서는 주기적으로 이를 호출하고 알리는 텔레그램 봇을 만들어보자.
끝!
'Python > 실습' 카테고리의 다른 글
[웹크롤링: bs4, requests] 네이버 날씨 미세먼지 가져오기 / 네이버 웹툰 제목 가져오기 / 네이버 웹툰 썸네일 가져오기 (0) | 2020.03.28 |
---|---|
[django 연습] 나의 첫 번째 Django 프로젝트 / Django Girls(장고 걸스) Tutorial (0) | 2020.03.21 |
[django 연습] Diary / 일기장 / CRUD 구현 (0) | 2020.03.04 |
[파이썬으로 영화 예매 오픈 알리미 만들기] 3. 스케쥴러 (0) | 2020.02.25 |
[파이썬으로 영화 예매 오픈 알리미 만들기] 2. 텔레그램 봇 (0) | 2020.02.24 |