본문 바로가기
PROGRAMMING/Data Analysis

[데이터 분석] (3-2) 데이터 수집 예제 : 뉴스 웹크롤링

by Hey Nary 2021. 10. 15.
728x90
반응형

웹 크롤링 (Web Scrapping)
1. 웹사이트에서 원하는 정보를 추출
2. 일일이 데이터를 모으기 힘들기 때문에 필요한 소프트웨어 기술

 

안녕하세요!

 

지난 포스팅에서, 데이터 수집이 무엇인지, 어떤 절차를 거치는지 알아 보았습니다.

정형 데이터를 Pandas 를 이용해 분석하는 예제도 보았었습니다!

 

[데이터 분석] (2) 데이터 수집하기

[데이터 분석] (3-1) 데이터 수집 예제 : 편의점 통계 데이터

 

이번 글에서는 비정형 데이터인 웹사이트의 데이터들을 수집하는 방법인,

Crawling (Web Scrapping) 에 대한 예제를 다루겠습니다!

 

말머리 [데이터 분석] 으로 검색해주세요!

 

<요약글>

[데이터 분석] (sumUP1) : 빅데이터 분석/데이터 수집/데이터 전처리

[데이터 분석] (sumUP2) : 지도학습/비지도학습/데이터시각화

[데이터 분석] (응용)미디어 데이터분석 - 기초 이론


Go to download file/github.com/NRKode

 

GitHub - NRKode/Data-Analysis: Data Analysis and Visualization

Data Analysis and Visualization. Contribute to NRKode/Data-Analysis development by creating an account on GitHub.

github.com

 

* 사용하는 기능

Beautifulsoup

- 웹문서의 구조를 찾아낼 수 있음

- html 파일을 가져오거나 웹에서 소스를 가져올 수 있음

 

* 분석 절차

1. 크롤링을 위해 필요한 파이썬 모듈을 불러온다.

2. Beautifulsoup 을 이용해 html 파일을 가져온다.

3. datetime 을 이용해 다중 페이지 크롤링을 한다.

4. request 를 이용해 Web source 를 가져온다.

5. re 을 이용해 전처리를 시작한다.

 

네이버 뉴스에서 "주식 상장"에 대한 뉴스의 제목, 하이퍼링크, 언론사를 크롤링

(1) 네이버 뉴스 검색 주소를 가져온다. - 검색어 : "주식 상장"

F12를 누르면 페이지 구성을 알 수 있는 창이 뜬다.

 

(2) 페이지 구성 파악

Ctrl+Shift+C 를 누르고 원하는 제목들을 선택한다.

웹소스에서 각 부분이 어디인지 확인한다.

언론사 : .info.press

제목 : .news.tit

링크 : .news.tit --> href

 

(3) Beautifulsoup 을 이용해 원하는 부분을 선택하고 리스트에 저장

코드는 아래 확인!

 

(결과 코드)
from bs4 import BeautifulSoup
from datetime import datetime
import requests
import pandas as pd
import re

url = 'https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%A3%BC%EC%8B%9D+%EC%83%81%EC%9E%A5'
response=requests.get(url)
html=response.text
soup=BeautifulSoup(html,'html.parser')

title_text=[] #제목 가져오기
atags=soup.select('.news_tit')
for atag in atags:
    title_text.append(atag.text)
title_text

link_text=[] #하이퍼링크 가져오기
atags=soup.select('.news_tit')
for atag in atags:
    link_text.append(atag['href'])
link_text

source_text=[] #언론사 가져오기
source_lists=soup.select('.info.press')
for source_list in source_lists:
    source_text.append(source_list.text)
source_text

 

 

이데일리에서 "코로나 뉴스" 링크에 대해 정리하기

(1) 정리하고 싶은 URL 을 복사해둔다.

 

(2) 다듬는 함수를 정의한다.

 

 

 

 # 이데일리 에서 코로나 뉴스 크롤링

from bs4 import BeautifulSoup
from datetime import datetime
import requests
import pandas as pd
import re


 urls = ['https://www.edaily.co.kr/news/read?newsId=04024566625964408&mediaCodeNo=257', 
       'https://www.edaily.co.kr/news/read?newsId=03519446625964408&mediaCodeNo=257',
       'https://www.edaily.co.kr/news/read?newsId=03883526625964408&mediaCodeNo=257']

# 크롤링 다듬는 함수 제작
def clean_text(text):
  content = text
  cleaned_text = re.sub('[a-zA-z]', '', str(content))
  cleaned_text = re.sub('[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>▶▽♡◀━@\#$%&\\\=\(\'\"ⓒ(\n)(\t)\r]', '', cleaned_text)
  cleaned_text = re.sub(' {2,}', ' ', cleaned_text)
  return cleaned_text

 

# 본문과 제목을 가져온다

news_text = []
for url in urls:
  response = requests.get(url)
  html = response.text
  soup = BeautifulSoup(html, 'html.parser')
  atags = soup.select('#contents > section.center1080.position_r > section.aside_left > div.article_news > div.newscontainer > div.news_body')
  for atag in atags:
    news_text.append(clean_text(atag.text)) 
news_text

728x90
반응형

댓글