파이썬으로 웹에서 정보를 가져오고 싶을 때 가장 많이 쓰는 두 가지 라이브러리가 있습니다.
바로 requests(웹 요청 라이브러리)와 BeautifulSoup(HTML 파싱 라이브러리)인데요,
이번 글에서는 이 둘을 활용해서 네이버 증권에서 원하는 종목의 주가를 가져오는 방법을 예제로 정리했습니다.
1. 필요한 라이브러리 준비
먼저 아래처럼 필요한 패키지를 설치해야 합니다.
(아나콘다 환경이라면 기본 설치되어 있을 수 있어요.)
pip install requests
pip install beautifulsoup4
2. 종목별 주가 크롤링 실습
자, 이제 실제로 네이버 금융에서 특정 주식의 현재가를 가져와보겠습니다.
import requests
ticker = '000660' # SK하이닉스 종목코드
url = f'https://finance.naver.com/item/main.naver?code={ticker}'
print(url) # 실제로 접속할 URL을 확인
res = requests.get(url=url) # 해당 주소로 GET 요청을 보냄
print(res.status_code) # 응답 코드(200이면 정상)
print(res.headers['content-type']) # 응답의 콘텐츠 타입
print(len(res.text)) # 받아온 HTML의 길이
3. BeautifulSoup으로 HTML 파싱
이제 받아온 HTML에서 원하는 정보를 뽑아내야 합니다.
여기서 BeautifulSoup이 큰 역할을 해줍니다!
from bs4 import BeautifulSoup as BTS
soup = BTS(markup=res.text, features='html.parser')
# 원하는 가격이 있는 위치를 CSS 선택자로 지정
items = soup.select('#rate_info_krx > div > p.no_today > em > span')
print(len(items)) # 몇 개가 선택됐는지 확인
print(items[0].text) # 첫 번째 요소의 텍스트(주가)
select()는 CSS 선택자를 이용해 원하는 태그를 쉽게 골라낼 수 있습니다.- 네이버 증권은 구조가 자주 바뀌기 때문에, 개발자 도구(F12)로 정확한 경로를 확인하는 게 중요합니다.
4. 함수로 만들어 재사용하기
여러 종목에 반복적으로 쓰고 싶다면 아래처럼 함수로 만들어두면 아주 편리하겠죠?
def stock_price(ticker):
url = f'https://finance.naver.com/item/main.naver?code={ticker}'
res = requests.get(url=url)
soup = BTS(markup=res.text, features='html.parser')
items = soup.select('#rate_info_krx > div > p.no_today > em > span')
return items[0].text
# 삼성전자(005930) 주가 가져오기
print(stock_price(ticker='005930'))
5. 정리
- requests로 웹에서 HTML을 받아오고, BeautifulSoup으로 원하는 정보를 깔끔하게 추출할 수 있습니다.
- 네이버 증권처럼 구조가 복잡한 사이트도 CSS 선택자를 잘 활용하면 필요한 데이터를 쉽게 가져올 수 있습니다.
'개발 > Python' 카테고리의 다른 글
| Python Basic: enumerate() 함수, 쉽게 이해하고 활용하기 (0) | 2025.05.22 |
|---|---|
| Python Basic: Python Path의 개념과 활용 (0) | 2025.05.21 |
| Python Basic: 리스트 컴프리헨션, 간단하고 강력한 리스트 생성 방법 (1) | 2025.05.21 |
| Python의 `sort()`와 `sorted()` 차이: 언제, 어떻게 사용할까? (0) | 2025.05.21 |
| Python Basic: 문자열 포맷팅 세 가지 방법 쉽게 정리! (0) | 2025.05.19 |