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파일 하나 생성(여기서 진행한다.)
ㅇ외부파일에서 DB에 저장하기 위해 필요한 것을 크게 3가지로 정리해봤다.
- 파일이 실행될 때 환경변수에 현재 프로젝트의 settings.py파일 경로를 등록.
- 실행파일에 Django 환경을 불러오는 작업.
- 크롤링을 하고 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
'Frameworks > Django' 카테고리의 다른 글
[Django] ~ 장고프로젝트 앱 생성까지 진행 (0) | 2022.05.30 |
---|---|
[Django] settings.py에서 SECRET KEY 관리하기 (0) | 2022.05.18 |
[Django] form입력 받는 세가지 방법 (0) | 2022.05.12 |
[Django] static파일 관리하기 (0) | 2022.05.11 |
댓글