나의 공부 일기

프로젝트) 크롤링/스크랩핑 프로젝트 4일차 본문

프로젝트

프로젝트) 크롤링/스크랩핑 프로젝트 4일차

곽병권 2023. 12. 8. 09:58
728x90

같이 프로젝트를 진행한 팀원: https://jihoon44-it.tistory.com/

 

 

 

 

3일차 프로젝트 링크 입니다.

https://k-python-note-taking.tistory.com/61

 

프로젝트) 크롤링/스크랩핑 프로젝트 3일차

2일차에서는 https://k-python-note-taking.tistory.com/60 프로젝트) 크롤링/스크랩핑 프로젝트 2일차 1일차에서 https://k-python-note-taking.tistory.com/59 프로젝트) 크롤링/스크랩핑 프로젝트 1일차 저는 지금 파이

k-python-note-taking.tistory.com

4일차 와 5일차에서는 장고와 부트스트랩을 활용하여 웹페이지를 간단하게 만들어보겠습니다.

 

첫번째로 3일차에 만들어두었던 csv파일을 하나의 csv파일로 합쳐주었습니다.

import pandas as pd
import glob

# 파일 경로
file_path = 'C:/Users/user/crawling_project'

# 파일 경로 패턴을 사용하여 여러 파일을 선택
files = glob.glob(file_path + '/*구.csv')

# 각 파일을 DataFrame으로 읽어와 리스트에 추가
dfs = [pd.read_csv(file) for file in files]

# 모든 DataFrame을 합치기
result = pd.concat(dfs, ignore_index=True)

# 결과를 새로운 파일로 저장
result.to_csv(file_path + '/crawling_서울시_자치구_카페_조사.csv', index=False)

우선 file_path에 내 csv파일이 있는 경로를 설정해주었습니다.

files = glob.glob(file_path + '/*구.csv') glob.glob라는 csv파일을 합쳐주는 패키지를 설치해여 사용해주었습니다.

 

file_path에 구.csv로 끝나는 모든 csv파일을 선택해준뒤

dfs라는 리스트에 for문을 이용해여 모든 csv파일이 들어있는 files를 각각 DataFrame으로 읽어와서 추가해주었습니다.

 

result에 이전에 담아두었던 모든 DataFrame들을 합처주어 하나의 csv파일로 만들준비를 하고.

 

result.to_csv로 crawling_서울시_자치구_카페_조사.csv 라는 csv파일을 만들어주었습니다.

index=False는 첫번째 열에 원래 0,1,2,3,4 라는 카운트가 들어가야되는데 이것을 없애주었습니다.

 

 

 

이렇게 crawling_서울시_자치구_카페_조사.csv 라는 csv파일을 생성해 주었습니다.

저는 장고에서 이 csv파일을 활용하기 위해 이를 장고 데이터베이스로 생성하였습니다.

 

csv파일 읽어와서 내 데이터베이스로 만들기 위해서는 먼저 장고에 그 csv파일 내의 있는 각각의 내용들을 담기위해 장고에서 모델을 만들어주어야 됩니다.

# models.py
from django.db import models

class CsvFile(models.Model):
    file_name = models.CharField(max_length=255)
    file = models.FileField(upload_to='uploads/')

class SeoulCafeList(models.Model):
    name = models.CharField(max_length=255)
    gu = models.CharField(max_length=255)
    address = models.CharField(max_length=255)
    cafe_class = models.CharField(max_length=255)
    cafe_menu = models.TextField()
    review_count = models.CharField(max_length=255)
    review_top3 = models.TextField()
    background_image_url = models.URLField()

    def __str__(self):
        return self.name

 

아 먼저 장고를 활용하기 위해서는 장고가 무엇인지 알아야합니다.

 

간단하게 장고는 웹페이지를 쉽게 만들 수 있는 툴? 이라고 보면됩니다.

장고가 가지고 있는 뼈대 함수를 활용하여 간단하게 만들어 줄 수 있습니다.

 

장고를 하기전에는

cmd창에서 pip install django 로 장고를 설치해주고

 

내가 프로젝트를 생성하고싶은 경로에서 

django-admin startproject 프로젝트이름으로 프로젝트를 생성해줍니다.

웹사이트를 만드려면 이 프로젝트의 앱도 생성해주어야 하는데, 방금 생성한 프로젝트 폴더로 들어가면 manage.py 라는 파이썬 파일이 있습니다.

 

이를 활용해서 python manage.py startapp 앱이름 으로 앱을 생성해주면 프로젝트 준비가 어느정도 끝납니다.

 

보통 

https://docs.djangoproject.com/ko/4.2/intro/tutorial01/

이 장고 튜토리얼을 가지고 공부를 많이 하신다고 하니 참고하시면 좋을것같습니다.

 

 

더 자세한 내용은 이후에 한번 더 정리해서 올리도록 하겠습니다 : )

 


 

이 모델에서는 데이터베이스의 테이블을 만들어줄 수 있습니다.

처음 파일의 이름과 파일의 경로를 사용해주기위해 file_name 과 file 이라는 칼럼(필드)들을 생성해주었습니다.

각각 CharField 라는 문자열 필드, FileField라는 파일 필드 입니다. 

 

만약에 추가적인 파일을 업로드 한다면 (upload_to='uploads/') 이 경로에 저장되게 됩니다. 

 

예를 들어, 만약 Django 프로젝트의 루트 디렉토리가 /home/user/myproject/이고, 파일 이름이 ex.csv인 경우, 이 파일은 /home/user/myproject/uploads/ex.csv  경로에 저장될 것입니다.

 

디렉토리 루트는 setting 에서 확인해줄 수 있습니다.

BASE_DIR = Path(__file__).resolve().parent.parent

기본적으로 장고에서는 이런 루트디렉토리를 사용하고 있습니다.

 

 

추가적으로 그 csv파일의 내용을 저장해줄 모델도 생성해주었습니다.

class SeoulCafeList(models.Model):
    name = models.CharField(max_length=255)
    gu = models.CharField(max_length=255)
    address = models.CharField(max_length=255)
    cafe_class = models.CharField(max_length=255)
    cafe_menu = models.TextField()
    review_count = models.CharField(max_length=255)
    review_top3 = models.TextField()
    background_image_url = models.URLField()

    def __str__(self):
        return self.name

TextFieldCharField와 같은 문자열 필드지만 보다 양이 많은 내용을 저장합니다.

URLField는 말 그대로 링크를 저장하는 필드입니다.

 

마지막에 함수 __str__를 사용함으로써 

모델 SeoulCafeList를 프린트하게 된다면 self.name 즉 나 자신의 name값이 보여지게 됩니다.

 

이렇게 모델을 만들어주었으면 이제 데이터를 삽입해주어야 합니다.

 

저는 장고쉘에서 이 코드를 작성하였습니다.

장고 쉘은 기본적으로 장고프로젝트를 생성하게 된다면 manage.py 라는 파이썬파일이 생성되는데

이 파이썬 파일에 shell이라는 기능을 사용하여 파이썬shell를 열어준것입니다.

여기서 파이썬 코드를 작성해줄 수 있습니다.

 

데이터베이스에 값을 넣어주기 위해 

os라는 파이썬의 내장모듈을 사용해주어

이를 활용하여 .csv라는 모든 파일들을 찾아 csv_files 라는 리스트에 넣어주었습니다.

 

file_path에는 각 파일의 경로를 어주었고

마지막에 create해줌으로써 데이터베이스를 생성해주었습니다.

 

 

두번째 모델입니다.

이렇게 csv 패키지를 활용하여 파일을 불러들인 후 reader 로 csv파일의 모든 내용을 가져왔습니다.

for문으로 reader에 들어있는 리스트들을 하나씩 가져온 후 그 리스트에서 

모델에 그 칼람에 해당하는 값들을  가져와 넣어주어 데이터베이스를 생성해주었습니다.

 

그럼 이렇게 데이터베이스가 만들어지게 됩니다.

 

이렇게 장고 모델을 생성해주었습니다. 

 

5일차에서는 이를 활용하여 웹페이지를 만들어보도록 하겠습니다.

 


 

728x90