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 |