본문 바로가기
  • 기억보단 기록을..
Python/Django

[Django] 직접 만든 코드 Django에서 사용하기.

by reine94._.dev 2020. 12. 30.

내가 만든 코드 Django에서 사용하기

url 을 통해 함수를 실행하는것 말고
내가 작성한 코드를 django와 연동시켜서 사용하는 방법


 

 

Django에서 내가 작성한 코드를 실행하기 위해서 가장 중요한 단계 2가지

  • 순서 중요하다.
    • django.setup() 을 통해 django가 세팅된 이후에 models 을 가져와야 django가 인식함
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', "Backend.settings") # my project name

import django
django.setup()

from {your_app} import models

 


예시코드

  • 내가 만든 멜론 탑100 크롤링 코드를 django models 에 ORM 을 이용하여 추가하려고 한다.
  • 해당 파일은 project 의 root 에 위치시키면 된다. ( == manage.py 와 같은 위치 )
# project/crawling.py

from bs4 import BeautifulSoup
import json, os, requests, django

os.environ.setdefault('DJANGO_SETTINGS_MODULE', "Backend.settings")

### 굉장히 중요
### django.setup() 후에 import models 을 해줘야 한다.
### 그렇지 않으면, django가 초기화 되지 않은 상황에서 model 을 불러오려고 해서 에러가 발생한다.
### Error -> django.core.exceptions.ImproperlyConfigured
django.setup()
from v1_api import models

# 크롤링 코드
BASE_URL = 'https://www.melon.com/chart/index.htm'
like_url = 'https://www.melon.com/commonlike/getSongLike.json?contsIds=' # network -> XHR
headers = {'User-Agent': 'Mozilla/5.0'}

# 요청보내고 응답을 받아서 bs4로 parsing
res = requests.get(BASE_URL, headers=headers)
soup = BeautifulSoup(res.content, 'html.parser')

# 원하는 데이터 목록 가져오기
songs = soup.select('#frm > div > table > tbody > tr')

# 크롤링한 데이터 orm 이용하여 Table에 데이터 생성
for song in songs: # 실험을 위해 5개까지만.
    song_no = song.get('data-song-no')
    image = song.select('td:nth-child(2) > div > a > img')[0].get('src')
    title = song.select('td:nth-child(4) > div > div > div.ellipsis.rank01 > span > a')[0].text
    singer = song.select('td:nth-child(4) > div > div > div.ellipsis.rank02 > span')[0].text
    album = song.select('td:nth-child(5) > div > div > div > a')[0].text
    likes = json.loads(requests.get(like_url + song_no, headers=headers).content)['contsLike'][0]['SUMMCNT']

    # pk 는 자동으로 들어가게됨.. 주의
    # 마지막에 save() 함수를 실행시켜야 DB에 저장된다.
    models.Melon(song_no=song_no, image=image, title=title, singer=singer, album=album, likes=likes).save()

print(f"Melon 인스턴스 : {len(songs)} 개 생성")

 

 

결과

  • 현재 나는 Django Settings.py 에서 DB를 PostgreSQL 로 바꾼상태이므로,
    pgAdmin4 이용해서 DB를 확인해본 결과 데이터가 정상적으로 들어간것을 확인할 수 있다.

 

 

참고블로그

나만의 웹 크롤러 만들기(4)

 

나만의 웹 크롤러 만들기(4): Django로 크롤링한 데이터 저장하기 - Beomi's Tech blog

좀 더 보기 편한 깃북 버전의 나만의 웹 크롤러 만들기가 나왔습니다! (@2017.03.18) 본 블로그 테마가 업데이트되면서 구 블로그의 URL은 https://beomi.github.io/beomi.github.io_old/로 변경되었습니다. 예제

beomi.github.io

파이썬으로 웹페이지 크롤링을...

 

파이썬으로 웹페이지 크롤링을 해보자. (1) Django 프로젝트 만들기

들어가며... 파이썬으로 웹페이지의 새로운 게시글을 크롤링하고, Django를 이용해서 DB에 저장하는 실습을 해보도록 하겠습니다. crontab을 이용해서 주기적으로 크롤링을 실행되도록 하고, 새로운

softwaree.tistory.com

 

댓글