본문 바로가기

Python

[Pandas] 데이터 수집 - 웹스크래핑

네이버 금융 홈페이지에서 종목 뉴스 스크래핑하기(크롬에서 가능)

1. 데이터 수집하기

  •  네이버 금융 홈페이지에서 원하는 종목을 검색하여 들어갑니다.
  • 개발자 도구(f12)에 들어가 Network 탭에서 종목뉴스에 관한 URL을 찾아줍니다.

 

  • 필요한 라이브러리를 불러오고 pd.read_html()을 사용하여 url 안에 내용을 불러옵니다.
import pandas as pd
import numpy as np

item_name = '삼성전자'
item_code = '005930'
page_no = 1

url = f'https://finance.naver.com/item/news_news.naver?code={item_code}&page={page_no}&sm=title_entity_id.basic&clusterId='
df = pd.read_html(url)
df

 

  • dataframe 형태로 만들어줍니다.
table = df[0]	# df가 리스트 형태로 되어있고 내가 필요한 내용은 0번 인덱스이므로 table변수에 인덱싱해준다.
table

 

  • for문을 사용하여 10페이지까지 내용을 스크래핑 해봅니다.
item_name = '삼성전자'
item_code = '005930'
page_no = 1
temp_list = []
for page_no in range(1,11):
    url = f'https://finance.naver.com/item/news_news.naver?code={item_code}&page={page_no}&sm=title_entity_id.basic&clusterId='
    df = pd.read_html(url)
    table = df[0]
    temp_list.append(table)

2. 데이터 전처리

  • 스크래핑 한 내용을 pd.concat()을 활용하여 하나의 dataframe으로 만들어줍니다.
news = pd.concat(temp_list)
news

205 rows로 늘어난 걸 볼 수 있다.

 

  • 내용을 보면 정보제공과 날짜 컬럼에 쓸모없는 내용이 있는 걸 확인할 수 있는데 이를 삭제해 줍니다.
news = news[~news['정보제공'].str.contains('연관기사')]	# .str.contains 를 사용하며 조건의 반대에는 앞에 ~ 표시로 표현할 수 있습니다. 
news

 

 

  • 중간에 빠진 행때문에 중간중간이 빠진 인덱스를 다시 만들어줍니다.
news = news.reset_index(drop=True) # drop=True는 기존에 있던 인덱스를 삭제해줍니다
news

3. 파일로 저장하기

  • 정리한 뉴스를 파일로 저장해줍니다.
date = news['날짜'].iloc[0][0:10]
file_name = f'{item_name}:{item_code}_{date}.csv' # 마지막에 .csv를 넣어줘야 깔끔하게 정리돼서 저장됌
news.to_csv(file_name, index=False)
#pd.read_csv(file_name) # 파일을 읽어오는 코드

저장된 파일

4. 함수로 만들기

  • 하나의 함수로 만들어 대한항공의 종목뉴스를 가져와봤습니다.


[코드라이언] AI SCHOOL에서 배운 내용을 토대로 실습을 한 내용입니다.

'Python' 카테고리의 다른 글

[Python] Streamlit과 Github 실습  (1) 2022.10.19
[Pandas] 데이터 수집 - 웹스크래핑(Json)  (0) 2022.09.30
[Seaborn] Distribution Plots  (0) 2022.09.27
[Seaborn] Relational Plots  (0) 2022.09.27
[Seaborn] 들어가기  (0) 2022.09.26