파이썬으로 크롤링 해보기 part.3

앙이🐯·2021년 9월 27일
0

크롤링

목록 보기
3/3

1. 텍스트파일 읽고 쓰기

텍스트 파일 쓰기
- 내장 함수인 open()을 이용
- 첫 번째 변수는 파일명, 두 번째 변수는 쓰기 모드, 세 번째 변수는 한글을 지원하는 인코딩을 뜻합니다.
with open("test.txt", "w", encoding="utf-8") as f:
   f.write("각 줄마다 번호를 적은 파일입니다.\n")
   for i in [1,2,3,4,5]:
       f.write(f"이것은 {i}번째 줄입니다.\n")
텍스트파일 읽기
- 읽기모드(r)를 이용
with open("test.txt", "r", encoding="utf-8") as f:
   lines = f.readlines()
   for line in lines:
       print(line)

2. 워드클라우드 만들기

1) wordcloud 패키지 설치
  • 패키지 설치
    wordcloud라는 패키지를 이용하여 워드 클라우드를 만들어보도록 하겠습니다. Settings/Preferences > Project Interpreter에서 설치해주세요.

2) 카카오톡 대화내용 준비

PC 카톡에서 채팅방을 연 후 메뉴 > 대화 내용 > 대화내보내기 해서 대화 내용을 텍스트 파일로 저장한 후 프로젝트 폴더로 옮겨주세요.

3) 카카오톡 텍스트 파일 읽기
- 텍스트 파일의 각 줄을 읽어 새 문자열인 text에 저장하는 방법을 사용
text = ""
# 파일 이름은 맞게 바꿔주세요!
with open("kakaotalk.txt", "r", encoding="utf-8") as f:
   lines = f.readlines()
   for line in lines:
       text+=line

print(text)
4) 한글 폰트 찾기
- 파이썬에서 그림을 그릴 때 기본으로 사용하는 폰트가 한글을 지원하지 않는 경우가 많아 우리가 직접 폰트 파일이 저장되어있는 경로를 찾아 넣어주어야해요.
#폰트 검색
import matplotlib.font_manager as fm

# 이용 가능한 폰트 중 '고딕'만 선별
for font in fm.fontManager.ttflist:
   if 'Gothic' in font.name:
       print(font.name, font.fname)
font_path = 'C:/Windows/Fonts/malgunbd.ttf'
5) 워드클라우드 만들기
from wordcloud import WordCloud

#뒤에 font_path자리에 위에서 찾은 경로('C:/Windows/Fonts/malgunbd.ttf')를 넣어줌
wc = WordCloud(font_path=font_path, background_color="white", width=600, height=400)
wc.generate(text)
wc.to_file("result.png")
6) 데이터클렌징
  • 데이터 클렌징이란?
    전처리(preprossessing) 과정의 하나로, 자료에서 불완전하거나, 비정확하거나, 관련 없는 부분을 찾아 삭제하거나 수정하는 것을 말합니다. 테이블에 빈 칸이 있거나, 단위가 잘못되었거나, 오타가 있거나 등등의 경우에 원하는 결과를 얻을 수 없기 때문에 분석하기 전에 미리 처리를 해주는 것이죠. 우리의 경우에는 내보내기한 카카오톡을 열어보면 날짜, 시간, 프로필 이름 등의 무의미한 부분이 반복적으로 나타나기 때문에 이것들을 지워주어야 더 흥미로운, 실제로 사람들이 사용한 단어를 강조할 수 있습니다.
from wordcloud import WordCloud

text = ""
# 파일 이름은 맞게 바꿔주세요!
with open("kakaotalk.txt", "r", encoding="utf-8") as file:
   lines = file.readlines()
   for line in lines:
       if '] [' in line:
           text += line.split('] ')[2].replace('ㅋ','').replace('ㅠ','').replace('ㅜ','').replace('사진\n','').replace('이모티콘\n','').replace('삭제된 메시지입니다','')

font_path = 'C:/Windows/Fonts/CoreGTM3.otf'

wc = WordCloud(font_path=font_path, background_color="white", width=600, height=400)
wc.generate(text)
wc.to_file("result.png")
7) 워드 클라우드
  • 원하는 모양으로 만들기
    직사각형 모양 뿐만 아니라, 원하는 어떤 모양이든 흰색 배경의 이미지가 있으면 만들 수 있습니다.

    이 이미지를 스텐실(컴퓨팅에서는 mask🎭라는 표현을 사용합니다)로 사용해서 검은 부분에만 글씨를 채워놓도록 하겠습니다.
from PIL import Image
import numpy as np

mask = np.array(Image.open('cloud.png'))
wc = WordCloud(font_path=font_path, background_color="white", mask=mask)
wc.generate(text)
wc.to_file("result_masked.png")
완성
from wordcloud import WordCloud
from PIL import Image
import numpy as np

text = ''
with open("KakaoTalk.txt", "r", encoding="utf-8") as f:
   lines = f.readlines()
   for line in lines[5:]:
       if '] [' in line:
           text += line.split('] ')[2].replace('ㅋ', '').replace('응','').replace('ㅠ', '').replace('사진','').replace('이모티콘\n','').replace('삭제된 메시지입니다','').replace('샵검색','').replace('받기 완료','').replace('내가','').replace('난','').replace('오늘','').replace('너','').replace('동영상','').replace('나는','').replace('나도','')


mask = np.array(Image.open('cloud.png'))
wc = WordCloud(font_path='C:/Windows/Fonts/Hancom Gothic Bold.ttf', background_color="white", mask=mask)
wc.generate(text)
wc.to_file("result_masked.png")
  • 결과물

0개의 댓글