본문 바로가기

IT/Django

크롤러를 Django에 추가하기

2019/04/03 - [IT/크롤링] - 로튼 토마토 평점 크롤링 하기

2019/03/23 - [IT/크롤링] - 크롤링

2019/03/07 - [IT/Django] - Django 에서 어플리케이션 설정

2019/03/06 - [IT/Django] - Django 설치 절차

 

앞서 만든 크롤러는 로튼토마토에서 영화 평점을 크롤링하여 화면에 print 하는 기능을 하였지만, 이번엔는 브라우져 화면에 노출을 위하여 DB에 저장하고, UI 화면에 노출하도록 하겠습니다.

 

만든 크롤러를 Django에 붙이는 방법은 크게 두가지가 있습니다.

 

  1.  Django에 App으로 추가 하여, 구동을 URL 호출을 하여 구동시키는 방법
  2.  Django 환경을 불러와서 연동하는 방법입니다.

이중 이 포스트에서는 1번 방법을 하도록 하겠습니다.

1. Django에 App 추가하기

필요한 App 은 크롤링하는 App과 해당 결과를 브라우져 에 노출하는 App 두개가 필요 하므로, 두개의 App을 추가 하겠습니다. Django의 설치 및 App 설정은 이전 포스트를 확인 해주시기 바랍니다.

python3 manage.py startapp crawler
python3 manage.py startapp viewsite

2. 데이터 모델링 하기

크롤링한 데이터를 저장하고, 다른 App에서 노출하기 위해서는 DB를 사용할 예정이며, 그러기 위해서는 Django의 model을 만들어야 합니다.

from django.db import models
from django.utils import timezone


class Movie(models.Model):
    title = models.CharField(max_length=100)
    releasedate = models.DateTimeField(blank=True, null=True)
    rt_point = models.CharField(max_length=10, blank=True, null=True, default='')

영화제목, 개봉일, 평점 정보를 저장하는 테이블 구조를 지정한 것입니다. 이후, Django의 migrate를 이용하여 DB에 테이블을 생성하게 할 것입니다.

3. 데이터 모델 적용하기

Django의 모델을 적용하기 위해서는 아래 명령을 수행해야 합니다. 수행하고 나면, DB에 테이블이 없으면 생성하고 존재하면 모델의 형태로 테이블을 변경합니다.

python3 manage.py makemigrations
python3 manage.py migrate

4. DB 저장 함수 만들기

모델을 만들었으니, DB 저장 함수를 만들어 보겠습니다.

from .models import Movie
from django.core.exceptions import ObjectDoesNotExist

def save(title, date, point, site):
        try :
                movie = Movie.objects.get(title=title)
        except Movie.DoesNotExist:
                movie = Movie.objects.create(title=title, releasedate=date)
        except ObjectDoesNotExist:
                movie = Movie.objects.create(title=title, releasedate=date)
        except Exception as ex:
                print("Exception : " , ex)

        if 'RT' == site:
                movie.rt = point

        movie.save()

위의 데이터 저장 함수는 약간의 문제가 있는데, 그건 바로,  영화제목을 기준 데이터로 삼고 있다는 것입니다.

그럼 영화제목을 기준 데이터로 삼으면 어떤 문제가 발생 할까요?

 

  1. 과거 동일한 제목의 영화가 존재 할 경우, 데이터 충돌이 발생
  2. 타 사이트 크롤링 추가시, 같은영화지만 표기 제목이 다를 경우, 다른 영화로 인식

위의 문제가 있다는 것을 인지 하고 해당 문제들은 추후 처리 하기로 합니다.

 

5. 뷰사이트 만들기

뷰사이트는 위에서 이미 별도의 App으로 추가해 두었습니다. 이 데이터를 가져와 노출하는 방법은 이전 포스팅을 참고하여 주시기 바랍니다. 다만 이 항목에서 다룰 것은 다른 App에서 설정한 모델에 어떻게 접근 할 것인가를 설명하고 마무리 하겠습니다.

자기자신의 App의 모델을 접근 하기 위해서는 다음과 같은 코드면 됩니다

from .models import Movie

허나, 다른 App에서 정의한 model에 접근하기 위해서는 models 앞에 App의 이름을 붙여 줘야 합니다.

즉,

from crawler.models import Movie

로 해야 접근이 가능 합니다.

 

이포스팅에서는 장고로 크롤링하여 DB에 데이터 저장하는 것이 주된 내용이니 이점 참고하여 주세요.

'IT > Django' 카테고리의 다른 글

Django 에서 어플리케이션 설정  (0) 2019.03.07
Django 설치 절차  (0) 2019.03.06