기사 크롤링

Soyoung Park·2022년 9월 1일
0

TIL python

목록 보기
12/16

네이버 랭킹 뉴스 크롤링

# 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)
^ 기사 크롤링 하기

wordcloud

^ 위에 기사 크롤링 통해 저장한 데이터 준비하기

^ 데이터 전처리 통해 '' , ""와 같은 특수 기호 없애주기


^ 워드 클라우드 시각화


^ 워드 시각화를 위한 데이터 전처리

# 기호 remove 하는 것 미리 실행시켜 놔주라
import re
 
def clean_text(inputString):
  text_rmv = re.sub('[-=+,#/\?:^.@*\"※~ㆍ!』‘|\(\)\[\]`\'…》\”\“\’·]', ' ', inputString)
  return text_rmv
  


^ 전처리 안하고 clean_text 통해 특수 기호 없앨 수 있음.


^ day_text 워드 클라우드 시각화

^ 네이버랭킹뉴스 댓글 많은 뉴스 워드 클라우드 시각화 (memo_text)

^ background_color 를 pink 로 바꿈

worldcloud python mask

특정 모양을 가진 워드 클라우드 만들기

^ 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)

^ 워드 클라우드 특정 모양 파일 넣어주기

^ 구름 모양 워드 클라우드 시각화

0개의 댓글