티스토리 뷰

반응형

1. beautifulsoup4 설치

pip install beautifulsoup4

2. import

import requests
from bs4 import BeautifulSoup
import time

3. get_code 함수 정의

종목코드를 받아와서 네이버 금융에서 해당 종목의 HTML 코드 가져오기
def get_code(company_code):
    url = f"https://finance.naver.com/item/main.naver?code={company_code}"
    result = requests.get(url)
    bs_obj = BeautifulSoup(result.content, "html.parser")
    return bs_obj

4. get_price 함수 정의

가격 크롤링
def get_price(company_code):
    bs_obj = get_code(company_code)
    div_today = bs_obj.find("div", {"class": "today"})
    no_today = div_today.find("p", {"class": "no_today"})
    price = no_today.find("span", {"class": "blind"}).text
    return price

5. get_compare 함수 정의

전일대비 등락률 크롤링
def get_compare(company_code):
    bs_obj = get_code(company_code)
    no_exday = bs_obj.find("p", {"class": "no_exday"})
    em = no_exday.find("em")
    em_ico = em.find("span", {"class": "ico"}).get("class")[1]
    compare_price = em.find("span", {"class": "blind"}).text
    if em_ico == "up":
        compare_price = "+" + compare_price
    elif em_ico == "down":
        compare_price = "-" + compare_price
    return compare_price

6. 가격이 변동이 있을 때만 가격 및 전일대비 출력

while True:
    price = get_price(company_code)
    if previous_price != price:
        previous_price = price
        compare = get_compare(company_code)
        print(price, compare)
    time.sleep(0.5)

 

7. 전체 소스

import requests  # requests 모듈 import
from bs4 import BeautifulSoup  # BeautifulSoup 모듈 import
import time  # time 모듈 import

# 삼성전자 (005930) 기준
company_code = "005930"  # 삼성전자 종목코드 저장
previous_price = None  # 이전 가격 저장 변수 초기화


def get_code(company_code):
    # 종목코드를 받아와서 네이버 금융에서 해당 종목의 HTML 코드 가져오기
    url = f"https://finance.naver.com/item/main.naver?code={company_code}"
    result = requests.get(url)  # GET 요청
    bs_obj = BeautifulSoup(result.content, "html.parser")  # HTML 코드를 파싱
    return bs_obj  # 파싱된 HTML 코드 객체 반환


def get_price(company_code):
    bs_obj = get_code(company_code)  # 종목코드로부터 파싱된 HTML 코드 가져오기
    div_today = bs_obj.find("div", {"class": "today"})  # 현재가가 있는 div 태그 찾기
    no_today = div_today.find("p", {"class": "no_today"})  # 현재가가 있는 p 태그 찾기
    price = no_today.find("span", {"class": "blind"}).text  # 현재가가 있는 span 태그의 class 속성값이 blind인 태그의 텍스트 가져오기
    return price  # 현재가 반환


def get_compare(company_code):
    bs_obj = get_code(company_code)  # 종목코드로부터 파싱된 HTML 코드 가져오기
    no_exday = bs_obj.find("p", {"class": "no_exday"})  # 전일 대비가 있는 p 태그 찾기
    em = no_exday.find("em")  # 전일 대비가 있는 em 태그 찾기
    em_ico = em.find("span", {"class": "ico"}).get("class")[1]  # em 태그 내부의 span 태그의 class 속성값 가져오기
    compare_price = em.find("span", {"class": "blind"}).text  # 전일 대비의 가격이 있는 span 태그의 class 속성값이 blind인 태그의 텍스트 가져오기
    if em_ico == "up":
        compare_price = "+" + compare_price
    elif em_ico == "down":
        compare_price = "-" + compare_price
    return compare_price  # 전일 대비 가격 변동 정보 반환


while True:
    price = get_price(company_code)  # 현재가 가져오기
    if previous_price != price:  # 이전에 가져온 현재가와 현재 가져온 현재가가 다르다면
        previous_price = price  # 이전 현재가를 현재 현재가로 업데이트
        compare = get_compare(company_code)  # 전일 대비 가격 변동 정보 가져오기
        print(price, compare)  # 현재가와 전일 대비 가격 변동 정보 출력
    time.sleep(0.5)  # 0.5초 간격으로
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함