web/Django

장고 APP 생성 후 DB에 담을 준비

JongSeok_12 2019. 11. 28. 18:45

app 생성은 다음과 같은 startapp [ app이름 ] 으로 생성하면 된다

생성한뒤 디렉터리를 보면 새롭게 cgv라는 app 디렉터리가 생긴 것 을 볼 수 있다

이제 생성한 app 안에 있는 model.py를 이용해 

데이터베이스의 구조를 잡아보려고 한다.

다음과 같이 model.py 파일 안에 클래스를 만들었다

이는 DB에 Cgv_data 라는 테이블을 생성하고

 name, start_tim, end_time ........ dt_area 의 컬럼을 생성한 것이다.

이제부터는

크롤링하는 소스를 함수형태로 바꾸어서 

import 해서 사용할 수 있도록 만든뒤 본격적으로 DB에 담는 것을 수행한다.

from bs4 import BeautifulSoup
from selenium import webdriver
import requests
import os



movie_datas = []



# cgv 서울 지역별 url요청후 해당 지역의 iframe 링크를 받아온다
# 받아온 링크를 가지고 crawling이라는 함수의 인자값으로 전달
# 아래함수에서 추가한 list를 return


def get_cgv () :
    url = 'http://www.cgv.co.kr'
    driver = webdriver.Chrome()
    driver.get('http://www.cgv.co.kr/reserve/show-times/')
    html = driver.page_source
    driver.close()
    soup = BeautifulSoup(html, 'html.parser')
    soup2 = soup.find('div', id='contents')
    for area in soup2.select('ul > li:nth-child(1) > div.area > ul > li > a ') :
        area_link = url + area.get('href')
        res = requests.get(area_link)
        soup = BeautifulSoup(res.content, "html.parser")
        for i in soup.select("iframe#ifrm_movie_time_table"):
            movie_data_link = url + i.get("src")
            crawling(movie_data_link)
    return movie_datas




# 받아온 인자값 movie_data_link 에는 iframe 링크가 담겨있음
# 본격적으로 필요한 정보들을 수집
# 좌석, 영화 이름, 시간 등등...
# 모든 데이터는 dic 형태로 담은뒤 movie_datas list에 추가


def crawling (movie_data_link) :

    res = requests.get(movie_data_link)
    soup = BeautifulSoup(res.content, "html.parser")

    for i in soup.select("div.sect-showtimes > ul > li"):
        for ec in i.select("div.type-hall > div.info-timetable > ul > li > a"):
            movie_data = {
                "name" : i.div.a.strong.text.strip(),
                "start_time" : ec.get("data-playstarttime"),
                "end_time" : ec.get("data-playendtime"),
                "area" : ec.get("data-theatername"),
                "seat" : ec.get("data-seatremaincnt"),
                "dt_area" : ec.get("data-screenkorname")
            }
            movie_datas.append(movie_data)
            
            
# 직접 해당 파일을 실행시킬때만 get_cgv()함수의 리턴 값을 print
# 즉 해당 모듈을 import 해서 사용시에는 직접 함수를 불어와서 실행

if __name__ == '__main__' : 
    print(get_cgv())



 

결과

 

위와 같이 성공적으로 해당 parser.py 파일이 실행 되는 것을 볼 수 있음