본문 바로가기

Data Project/Mini Project1

네이버 금융 웹페이지 스크래핑 0302테마스크래핑-내용

https://finance.naver.com/sise/theme.naver

 

테마별 시세 : 네이버 증권

관심종목의 실시간 주가를 가장 빠르게 확인하는 곳

finance.naver.com

지난번 네이버 금융 테마별 시세 페이지 목록 스크래핑에 이어 각 테마별 종목(내용)을 스크래핑 해보자.

3-2. 테마별 시세 페이지 스크래핑-내용

1. 필요 라이브러리 로드
2. 테마 목록 수집 파일 불러오기
3. 함수 만들기를 위한 샘플 수집(수집할 페이지 URL 설정, requests 요청, table 정보 확인 + 간단한 전처리)
4. 하나의 함수로 만들기 (+ 경로 오류 해결)
5. 만든 함수와 반복문으로 각 테마별 종목 테이블 파일로 저장하기

1) 필요 라이브러리 로드

# 라이브러리 로드
import time
import pandas as pd
import numpy as np
import requests
from bs4 import BeautifulSoup as bs

안 써도 그냥 막 가져와 이젠..

2) 테마 목록 수집 파일 불러오기

지난 포스팅에서 만들어 둔 테마별 목록 수집 파일을 불러온다.

# theme-list 수집한 파일 읽어오기
df = pd.read_csv("naver-finance-theme-list.csv")
df.shape # (270, 9)

확인해보면

display(df)


3) 함수 만들기를 위한 샘플 수집(수집할 페이지 URL 설정, requests 요청, table 정보 확인 + 간단한 전처리)

첫번째 행인 2023 상반기 신규 성장으로 샘플 수집을 해보자.

link_no=522

# url 설정
url = f"https://finance.naver.com/sise/sise_group_detail.naver?type=theme&no={link_no}"
print(url)

# requests 요청
response = requests.get(url)

# table 불러오기
table = pd.read_html(response.text)[2]
# 토론실 빼고 불러오기
table = table.iloc[:,:-2]
# 결측치 제거
table = table.dropna()
# 인덱스 초기화
table = table.reset_index(drop=True)
table

url 설정, requests 요청, 간단한 전처리는 앞선 포스팅들에서도 다뤘기 때문에 자세한 설명은 생략.

이렇게 2023 상반기 신규 상장 종목들을 잘 가져오는 것을 확인할 수 있다.

데이터 수집일과 화면 캡쳐일이 달라 시세에 차이가 있음 주의

4) 하나의 함수로 만들기 (+ 경로 오류 해결)

이제 위 샘플 과정을 함수로 만들어준다.

# 테마별 종목 table 수집 및 파일 저장 함수 만들기

def get_theme_table(theme_name, link_no):
    ''' 네이버 금융 테마별 종목 table 수집 함수
    '''
    try:
        url = f"https://finance.naver.com/sise/sise_group_detail.naver?type=theme&no={link_no}"
        response = requests.get(url)
        table = pd.read_html(response.text)[2]
        table = table.iloc[:,:-2]
        table = table.dropna()
        table = table.reset_index(drop=True)
        file_name = f"theme-data/naver-theme-contents-{theme_name}-{link_no}.csv"
        file = table.to_csv(file_name, index=False)
        time.sleep(0.001)
        return file
    except Exception as e:
        print(f"오류 링크 번호 : {link_no}, 오류 메시지 : {e}")

이때 file_name을 설정하는 데 있어 오류가 있었는데, 다음과 같다.

file_name = f"theme-data/naver-theme-contents-{theme_name}-{link_no}.csv"
이처럼 파일명을 설정할 때 파일 저장 경로도 설정할 수 있는데, "/"로 표시한다.
문제는 테마 이름 중에 "/"를 포함한 테마들이 있어 그대로 파일명을 설정하게 되면 파일 저장 경로 오류가 뜬다.

"/"를 포함한 테마명들

오류는 다음 과정에서 해결.

5) 만든 함수와 반복문으로 각 테마별 종목 테이블 파일로 저장하기

# 반복문으로 업종별 종목 table 수집 및 파일로 저장하기

link_no = list(df["링크번호"])
#경로 오류 해결 테마명 "/" 제거
name = list(df["테마명"])
theme_name = [a.replace("/", "-") for a in name]
name_no = 0

for i in link_no:
    get_theme_table(theme_name[name_no], i)
    name_no += 1

반복문으로 각 테마별 내용(종목)을 수집할 수 있다. 오류는 "/"를 "-"로 대체함으로써 해결했다.

# 파일 확인
pd.read_csv("theme-data/naver-theme-contents-코로나19(혈장치료-혈장치료제)-437.csv")

데이터 파일 개많은디

이렇게 스크래핑은 모두 종료!

근데 이 데이터로 뭘 분석하지? 항상 인사이트가 문제다 문제