본문 바로가기
Frameworks/Django

[Django] 크롤링한 데이터 DB에 저장하기

by 젊은오리 2022. 5. 4.
728x90

설명에 앞서

Django개발 환경 세팅까지 완료된 상태임을 가정한다. 

parsed_data라는 app을 생성했다.

DB로는 Django의 sqlite를 활용하며 현재 title과 link을 갖는 BlogData모델을 하나 만든상태이다. 

1
2
3
4
5
6
7
8
9
10
11
# models.py
 
from django.db import models
 
# Create your models here.
class BlogData(models.Model):
    title = models.CharField(max_length=200)
    link = models.URLField()
 
    def __str__(self):
        return self.title
cs

 

manage.py와 같은 위치에 parser.py파일 하나 생성(여기서 진행한다.)

parser.py경로

 

외부파일에서 DB에 저장하기 위해 필요한 것을  크게 3가지로 정리해봤다.

  1. 파일이 실행될 때 환경변수에 현재 프로젝트의 settings.py파일 경로를 등록.
  2. 실행파일에 Django 환경을 불러오는 작업.
  3. 크롤링을 하고 DB model에 저장.

 

크롤링 과정

크롤링을 하기 위해 requests 라이브러리와 bs4의 BeautifulSoup모듈을 import해주고 아래 사이트에 있는 title목록을 간단하게 크롤링해봤다. 크롤링 방식은 BeautifulSoup의 select메서드를 사용했다. (CSS selector 파악하기!!)

https://beomi.github.io/beomi.github.io_old/

사이트를 들어가보면 알겠지만, title을 누르면 경로로 이동하는식으로 되어있기 때문에 가져올때 data['title']='url'  이런식으로 data에 저장하고 모든게 저장되었다면 data를 리턴한다. 

 

전체코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#pasrer.py
 
import requests
from bs4 import BeautifulSoup
 
#1번 파일이 실행될 때 환경변수에 현재 자신의 프로젝트의 settings.py파일 경로를 등록.
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE","[프로젝트이름].settings")
 
#2번 실행파일에 Django 환경을 불러오는 작업.
import django
django.setup()
 
 
#3번 크롤링을 하고 DB model에 저장.
from parsed_data.models import BlogData
 
def parse_blog():
    req = requests.get('https://beomi.github.io/beomi.github.io_old/')
    soup = BeautifulSoup(req.content,'html.parser')
    my_titles = soup.select(
        'body > h3 > a'  
    )
 
    data = {}
    for title in my_titles:
        data[title.text] = title.get('href')
    
    return data
 
blog_data_dict = parse_blog()
 
for t, l in blog_data_dict.items():
    BlogData(title=t, link=l).save()
 
cs

 

 

실행결과

 

Reference https://beomi.github.io/gb-crawling/posts/2017-01-20-HowToMakeWebCrawler.html

728x90

댓글