파이썬

[응용]BeautifulSoup를 이용한 관심 종목 현재가 구하기

aisw7984 2024. 10. 11. 15:23
반응형

BeautifulSoup는 파이썬에서 웹 페이지 분석을 하는데 매우 유용하게 쓰이는 외부 모듈이다.

BeautifulSoup는  웹페어지에서 데이터를 읽는 웹 크롤링에 매우 효과적으로 사용할 수 있다.

웹 크롤링은 앞서 말했듯이 크롤링(crawling) 은 웹페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위인데

흑히 스크랩핑이라고도 부른다.  이는 특정 사이트의 정보를 가져와서 활용하는데 필수적이라고 할 수 있는 기능이다.

 

우선 관심 종목 현재가 구하기를 하기 위해서 필요한 것들을 생각해 보자

1. 현재가 정보를 가져올 사이트

2. 현재가 정보를 가져오는 방법

으로 크게 2가지를 생각할 수 있다.

우선 1의 경우 우리가 사용하는 검색 사이트에서 쉽게 증권과 관련된 정보를 검색하면 찾을 수 있다. 그렇다면 

관심종목을 "삼성전자"로 하고 검색하게 되면 삼성전자 증권에 관한 여러 정보가 뜨는 창을 볼 수 있을 것이다.

삼성전자 주식 정보

아래 그림은 예시로 네이버 금융에서 삼성전자에 관한 주식을 본 것이다. 우리 눈에는 다양한 수치들이 정리되어 있는 것으로 보이는데. 우리가 파이썬 코딩을 할 때 필요한 것은 해당 페이지의 데이터이다. 따라서 해당 페이지의 데이터를 봐야 하는데 이는 마우스 우클릭-> 페이지 소스 보기 혹은 citl+u  가 있는데 더 쉬운 방법은 F12 키를 눌러보면 된다.

F12 키를 누르게 되면 우측에 패널이 하나 뜨게 되는데 여기서 봐야 할 것은 Element 창이다. 이 창에는 html 정보가 가득 들어있는데 이 중에서 원하는 데이터를 일일이 찾는 것은 매우 번거로운 작업이다. 따라서

콘솔 좌측 위에 보이는  화살표 모양을 클릭해 보면 주식정보 페이지 정보를 클릭하면 해당 정보의 데이터를 찾아준다.

결과적으로 해당 데이터는 <strong class="tah p11" id="_nowVal">64,900 </strong>라는 것을 알 수 있다.

 

이제 파이썬을 넘어가 보자.

우선 여러 모듈을 불러와줄 필요가 있는데.

from bs4 import BeautifulSoup  #읽어 들인 데이터 분석

from urllib import request # 특정 주소의 값을 읽어 들임

bs4는 앞서 말한 BeautifulSoup를 불러온 값이고

urllib은 웹사이트의 링크를 가져오기 위해 필요한 것이다.

target = request. urlopen("https://finance.naver.com/item/sise.naver?code=005930")

.urlopen = 인터넷 주소를 가져옴

 target이라는 변수에  원하는 증권의 정보를 가져온다.

soup =BeautifulSoup(target,"html.parser")

html 코드를 읽어 soup에 저장한다.

 

 

여기서 중요한 것은 단순 해당 데이터가 "strong'이라는 태그를 가지고 있다고

price =soup.select_one("strong").string 을 입력하면

.select_one() 은 페이지의 정보 중에서 ()의 값이 가장 먼저 나온 것을 찾기 때문에 해당 페이지에는 무수한 strong 태그를 가진 값이 있어 원하는 값을 얻을 수 없다. 따라서 현재가에 할당된 id 가 있는데 이를  # 을 통해 strong 뒤에 붙여주면 된다.

price =soup.select_one("strong#_nowVal").string

 이제 원하는 정보를 출력해 주면 아래와 같은 코드로 원하는 종목의 현재가를 알 수 있다.

 

# 종목의 현재가
from flask import Flask # 서버 생성을 위한 클래스
from urllib import request # 특정 주소의 값을 읽어들임
from bs4 import BeautifulSoup  #읽어 들인 데이터 분석

target = request.urlopen("https://finance.naver.com/item/sise.naver?code=005930")


soup =BeautifulSoup(target,"html.parser")


#soup 안에서 종목의 "현재가" 찾기!
# 현재가를 나타내는 태그는 <strong>인데, 해당 페이지에는 무수한 <strong>이 있다
# 그러나 현재가에는 _nowVal 이라는 고유한 id가 있어서 쉽게 찾을 수 있다

# .string : 태그안에서 문자열만 추출
# #_nowVal : 아이디가 _nowVal 인 문자열
price =soup.select_one("strong#_nowVal").string
print("삼성 전자의 현재가는{}입니다. ".format(price))
반응형

'파이썬' 카테고리의 다른 글

파이썬 4일차 - 함수  (0) 2024.10.11
파이썬 3일차 - 반복문(2)  (0) 2024.10.08
파이썬 2일차 - 조건문 ,반복문(1)  (0) 2024.10.08
파이썬 교육 1일차  (0) 2024.10.08