미니프로젝트

기사 제목 크롤링을 통한 워드클라우드 시각화하기 [완료]

728x90

기쁨의 워드클라우드 탈출기.

 

 

무언가 해놓은게 없다는 판단에 배운거라도 써먹을 수 있도록 기사제목 크롤링 후 워드클라우드로 일자 별 키워드를 한눈에 볼 수 있는 코드를 짜봤다.

 

 

3월 21일에 시작을 하고 끝까지 다 왔지만 워드클라우드의 한글 폰트 적용문제로 3일간 디버깅을 시도하였고, 코랩,    VS Code, Jupyter notebook등에서 시도해도 되지 않던 한글폰트 적용을 24일 밤에 성공했다 ㅋㅋㅋㅋ

 

남들에겐 아무것도 아닌 쉬운 작업일지 몰라도 뉴비인 나에겐 엄청 큰 발전이다.

 

아래는 코드.

pip install konlpy #한글의 형태소 분석등을 위한 꼬꼬마를 사용하기위해 설치
import requests
import pandas as pd
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
import nltk 
from konlpy.tag import Kkma
from konlpy.tag import Twitter
from wordcloud import WordCloud
!apt-get update -qq
!apt-get install fonts-nanum* -qq  #코랩에서 한글 표기를 위해 폰트 설치(리눅스)

#코랩의 플랫폼이 뭔지 몰랐던 탓에 몇일을 해맸다.
date='20210324' 
#일자는 변경해 주면 되며, 코드 상 3월24일의 네이버 뉴스 랭킹의 기사제목을 뽑아온다.
news_url = 'https://news.naver.com/main/ranking/popularDay.nhn?date={}'.format(date)


headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'}
req = requests.get(news_url, headers = headers)
#  headers = headers 이것도 한참 애먹었었다. 왜 안되지? 라고 생각하면서 계속 구글링을 해보니 네이버에서 막은것이었다.
# 일명 안티 크롤링
soup = BeautifulSoup(req.text, 'html.parser')
news_titles = soup.select('.rankingnews_box > ul > li > div > a')

crowled_title = []
for i in range(len(news_titles)):
    crowled_title.append(news_titles[i].text)
    print(i+1, news_titles[i].text) # 기사 제목 리스트 저장하기

기사의 제목이 크롤링되어 리스트의 형식으로 저장되었다!

title = "".join(crowled_title)

filtered_title = title.replace('.', ' ').replace('"',' ').replace(',',' ').replace("'"," ").replace('·', ' ').replace('=',' ').replace('\n',' ')

filtered_title

tw = Twitter() # Twitter가 Okt로 변경되었다고 코랩이가 말해줬다.



tokens_ko = tw.nouns(filtered_title)

tokens_ko

ko = nltk.Text(tokens_ko, name='기사 내 명사')

ko.tokens

ko.vocab()

new_ko=[]
for word in ko:
  if len(word) > 1 and word != '단독' and  word != ' ':
        new_ko.append(word)

new_ko

ko = nltk.Text(new_ko, name = '기사 내 명사 두 번째')

ko.tokens

ko.vocab()

data = ko.vocab().most_common(150)

data = dict(data)

 

wordcloud = WordCloud().generate(filtered_title)

font = '/usr/share/fonts/truetype/nanum/NanumGothicEco.ttf'

wc = WordCloud(font_path=font,\
		background_color="white", \
		width=1000, \
		height=1000, \
		max_words=100, \
		max_font_size=300)
wc = wc.generate_from_frequencies(data)

plt.figure(figsize=(10,10))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

이렇게 출력이 가능하다 ㅎㅎㅎ

 

기분이 아주 좋다.

 

 

 

 

 

폰트 문제 해결의 주역 -pinkwink.kr/1324

 

Colab에서 KoNLPy와 WordCloud 설정하기

Colab은 무료에 GPU등을 사용할 수 있어서 아마 많이들 사용하실 텐데요. Colab의 사용에서 자연어, 특히 한글 자연어 처리를 해보려는 분들이 처음에 겪는 문제는 아마도 그래프에서 한글 표현과 Ko

pinkwink.kr

 

728x90