# 1) 데이터 프레임 생성 (어떤 데이터를 수집하려고 하는가)
data = pd.DataFrame(columns=['언론사명', '순위', '기사제목', '기사링크', '수집일자'])
# 2) 네이버 랭킹뉴스 접속 주소 준비: https://news.naver.com/main/ranking/popularDay.naver
url = 'https://news.naver.com/main/ranking/popularDay.naver'
# 3) url에서 HTML 가져오기
html = urlopen(url)
# 4) HTML을 파싱할 수 있는 object로 변환
bsOject = BeautifulSoup(html, 'html.parser', from_encoding='UTF-8')
# 5) 네이버 랭킹 뉴스 정보가 있는 div만 가져오기 -> 12개의 div 담겼을 것
div = bsOject.find_all('div', {'class', 'rankingnews_box'})
# 6) 네이버 랭킹뉴스 상세 정보 추출
for index_div in range(0, len(div)): #div 범위 있을 때까지 추출
# 6-1 ) 언론사명 추출
strong = div[index_div].find('strong',{'class', 'rankingnews_name'})
press = strong.text
# 6-2) 랭킹 뉴스 정보 추출 / 예외처리 except pass는 오류 나면 pass하고 계속 for문 돌리기
ul = div[index_div].find_all('ul', {'class', 'rankingnews_list'}) #랭킹 순서 가져오기
for index_r in range(0, len(ul)):
li = ul[index_r].find_all('li')
for index_1 in range(0, len(li)):
try: #오류 예외처리
#순위
rank = li[index_1].find('em', {'class', 'list_ranking_num'}).text
#뉴스제목
title = li[index_1].find('a').text
#뉴스링크
link = li[index_1].find('a').attrs['href']
# 7) dataframe 저장 (append)
data = data.append({'언론사명': press,
'순위': rank,
'기사제목': title,
'기사링크': link,
'수집일자': datetime.datetime.now(timezone('Asia/Seoul')).strftime('%Y-%m-%d %H:%M:%S')}, ignore_index=True)
except:
pass
print('Complets of' + rank + ' : '+title)
print('---------------------------')
print(data)
^ 기사 크롤링 하기
^ 위에 기사 크롤링 통해 저장한 데이터 준비하기
^ 데이터 전처리 통해 '' , ""와 같은 특수 기호 없애주기
^ 워드 클라우드 시각화
^ 워드 시각화를 위한 데이터 전처리
# 기호 remove 하는 것 미리 실행시켜 놔주라
import re
def clean_text(inputString):
text_rmv = re.sub('[-=+,#/\?:^.@*\"※~ㆍ!』‘|\(\)\[\]`\'…》\”\“\’·]', ' ', inputString)
return text_rmv
^ 전처리 안하고 clean_text 통해 특수 기호 없앨 수 있음.
^ day_text 워드 클라우드 시각화
^ 네이버랭킹뉴스 댓글 많은 뉴스 워드 클라우드 시각화 (memo_text)
^ background_color 를 pink 로 바꿈
특정 모양을 가진 워드 클라우드 만들기
^ 1) 이미지 파일 다운
^ 파일 넣어주기
# 특정 모양을 가진 워드 클라우드 만들기
import numpy as np
from PIL import Image # Python Imaging Library
mask = Image.open('/content/mask phython.png')
mask = np.array(mask)
^ 모양 파일 넣고 코드 입력해주기
^ mask = mask 코드 추가해주기
^ ul 테그 닫혀있는 형태의 막아놓은 파일은 사람인척 들어가서 코드 소스 가져오기
^ 파싱하기
^ 파일 저장하기
import matplotlib as mpl
import matplotlib.pyplot as plt
%config InlineBackend.figure_format = 'retina'
!apt -qq -y install fonts-nanum
import matplotlib.font_manager as fm
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
plt.rc('font', family='NanumBarunGothic')
mpl.font_manager._rebuild()
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
# 특정 모양을 가진 워드 클라우드 만들기
import numpy as np
from PIL import Image # Python Imaging Library
mask = Image.open('여기에 파일 경로 복붙해주기')
mask = np.array(mask)
^ 워드 클라우드 특정 모양 파일 넣어주기
^ 구름 모양 워드 클라우드 시각화