ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 장고 APP 생성 후 DB에 담을 준비
    web/Django 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 파일이 실행 되는 것을 볼 수 있음

    댓글

Designed by Tistory.