기사를 크롤링하여 WORDCLOUD를 만들어보자.¶
기사를 크롤링하여 Wordcloud를 만들어 보겠습니다. 먼저 저는 조선일보의 기사를 이용하였습니다. 전체적인 구조는 크롤링을 하고 의미없는 값들을 정리한 후 기사들을 모두 단어로 쪼개서 wordcloud를 만들어 보았습니다.
In [1]:
from urllib.request import urlopen
from bs4 import BeautifulSoup
from wordcloud import WordCloud, STOPWORDS
import numpy as np
from PIL import Image
import nltk
from konlpy.tag import Kkma
from konlpy.corpus import kobill
In [3]:
url_base="http://news.chosun.com/site/data/html_dir/2019/12/01/20191201"
last='.html'
title=[]
news_list=[]
for i in range(3000):
index=str(i)
if len(index)==1:
index='0000'+index
elif len(index)==2:
index='000'+index
elif len(index)==3:
index='00'+index
else:
insex='0'+index
try:
page=urlopen(url_base+index+last)
soup = BeautifulSoup(page, 'html.parser')
title.append(soup.find('h1').get_text())
news_list.append(soup.find_all(id="news_body_id",itemprop="articleBody")[0].get_text())
except:
pass
In [4]:
import re
news_raw_delete=[]
b=[]
c=[]
d=[]
for i in range(len(news_list)):
b.append(re.sub('....기자|스포츠조선....|스포츠조선....|\[OSEN.......]|...무단전재.........|ssu08....................................|TV조선|...................com|▲.*|좋아요..|Copy..............................|...osen...|Copyrig........|....sportschosun.com|....Chosun.com|제휴안내구독신청','',news_list[i]))
c.append(re.sub('[-=+,#/\?:^$.@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》]', '', b[i]))
d.append(re.sub('\s|입력','',c[i]))
news_raw_delete.append(d[i])
#b=re.sub('...................com|▲.*|좋아요..|Copy..............................','',news_list[5])
#b=re.sub('[-=+,#/\?:^$.@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》]', '', a)
#re.sub('\s|입력','',b)
In [5]:
len(title)
Out[5]:
449개의 기사를 크롤링 했습니다 :)
In [27]:
news_raw_delete[0]
Out[27]:
In [12]:
news_join = ','.join(news_raw_delete)
#article_join
In [28]:
from konlpy.tag import Twitter; t = Twitter()
tokens_ko = t.nouns(news_join)
tokens_ko[0]
Out[28]:
In [14]:
import requests, datetime
In [15]:
import os, sys, time
In [16]:
ko = nltk.Text(tokens_ko)
In [17]:
print(len(ko.tokens)) # returns number of tokens (document length)
print(len(set(ko.tokens))) # returns number of unique tokens
ko.vocab()
Out[17]:
In [18]:
import matplotlib.pyplot as plt
import platform
path = "c:/Windows/Fonts/malgun.ttf"
from matplotlib import font_manager, rc
if platform.system() == 'Darwin':
rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
font_name = font_manager.FontProperties(fname=path).get_name()
rc('font', family=font_name)
else:
print('Unknown system... sorry~~~~')
%matplotlib inline
In [19]:
plt.figure(figsize=(12,6))
ko.plot(50)
plt.show()
In [29]:
stop_words = ['를','의','개','전','점','해','위','등','말','승','로','팀','앞','번','곡','명','더','씨','것','날','등','때','관련','위해','위','더','건','이번']
ko = [each_word for each_word in ko if each_word not in stop_words]
ko[0]
Out[29]:
In [25]:
ko = nltk.Text(ko)
plt.figure(figsize=(12,6))
ko.plot(50) # Plot sorted frequency of top 50 tokens
plt.show()
In [26]:
data = ko.vocab().most_common(150)
wordcloud = WordCloud(font_path='../datahandling/NanumBrush.ttf',
relative_scaling = 0.2,
background_color='white',
).generate_from_frequencies(dict(data))
plt.figure(figsize=(12,8))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
'데이터분석 및 프로젝트' 카테고리의 다른 글
수열을 통해 마코프 체인의 단서를 얻어보자 :) (0) | 2020.01.15 |
---|---|
머신러닝을 이용해 데이터분석에 필요한 기초지식을 습득해보자 :) (0) | 2020.01.15 |
위도 경도 값을 이용하여 거리를 구하고 그래프를 그려보자 :) (0) | 2020.01.15 |
LZW 알고리즘과 허프만 부호화 방법을 서로 비교하여 분석해보자. (0) | 2020.01.08 |
크롤링과 코사인 유사도를 이용하여 영화추천 서비스를 만들어보자 :) (2) | 2020.01.07 |