'''
아나콘다 설치하였지만
추가적으로 인스톨 해주어야하는 라이브러리가 필요했다.
# pip install pytagcloud
# pip install simplejson
'''
import urllib.request as req
from bs4 import BeautifulSoup
from konlpy.tag import Okt
import pytagcloud
from urllib.parse import quote
# keyword = input("검색어")
keyword = '축제'
# print(keyword)
# print(quote(keyword))
# 그냥 검색어를 받아서 사용하면 안되고 encoding 해서 보내야하는데 quote 가 필요하다.
url = "https://www.donga.com/news/search?query=" + quote(keyword)
# print(url)
source_code = req.urlopen(url)
soup = BeautifulSoup(source_code, 'lxml', from_encoding='UTF-8')
# print(soup)
msg = ""
for title in soup.select('div.rightList > span.tit'):
# print(title)
title_link = title.find('a')
# print(title_link)
article_url = title_link['href']
# print(article_url)
try:
source_article = req.urlopen(article_url) # 실제 기사
soup = BeautifulSoup(source_article, 'lxml', from_encoding='UTF-8')
contents = soup.select('div.article_txt')
# print(contents)
for imsi in contents:
item = str(imsi.find_all(text=True))
# print(item)
msg = msg + item # 각 tag의 text를 누적
except Exception as e:
print('err : ', e)
# print(msg)
# 단어 수를 세어주는 라이브러리
from collections import Counter
okt = Okt()
nouns = okt.nouns(msg) # 명사별로 분할
result = []
for imsi in nouns:
if len(imsi) > 1:
result.append(imsi)
# 10 개만 추려서 출력 해보았다.
print(result[:10])
>> ['크게', '보기', '어린이날', '이틀', ...]
count = Counter(result)
print(count)
# 워드 클라우드 작성
tag = count.most_common(50) # Counter.most_common(50) : 상위 50개만 잡힘
# pytagcloud.make_tags() 로 워드클라우드 생성
taglist = pytagcloud.make_tags(tag, maxsize=100)
print(taglist[:10]) # [{'color': (107, 38, 155), 'size': 115, 'tag': '축제'},...]
# image 생성 후 저장
pytagcloud.create_tag_image(taglist, 'word.png', size=(1000,600), \
background=(0,0,0), fontname='malgun', rectangular=False)
여기까지 진행하면 '축제'라는 키워드의 워드클라우드 형태의 이미지가 만들어진다.
# 이미지 읽기
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img = mpimg.imread('word.png')
plt.imshow(img)
plt.show()
위의 이미지를 웹브라우저로 읽는 것도 가능하다.
# 브라우저로 읽기
import webbrowser
webbrowser.open('word.png')