내가 만든 코드 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): 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
'Python > Django' 카테고리의 다른 글
[Django] rest-auth, allauth 차이 (0) | 2021.01.18 |
---|---|
[Django] Admin page 수정하기 (1) (0) | 2021.01.16 |
[Django] models - class Meta (0) | 2021.01.12 |
Project 실행환경 분리해주기 [settings.py] 파일 분할 (0) | 2020.12.21 |
Templates 에 Google Font 적용하기 (0) | 2020.12.21 |
댓글