
파이썬으로 네이버 금융 인기 종목 엑셀 저장하기 (가장 직접적이고 명확함)
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
url = 'https://finance.naver.com/'
print(f"정보를 가져올 웹 페이지: {url}")
response = requests.get(url)
response.raise_for_status()
html = response.text
soup = BeautifulSoup(html, 'html.parser')
tbody = soup.select_one('#container > div.aside > div.group_aside > div.aside_area.aside_popular > table > tbody')
trs = tbody.select('tr')
datas = []
for tr in trs:
name = tr.select_one('th > a').get_text()
current_price = tr.select_one('td').get_text()
change_direction = tr['class'][0]
change_price = tr.select_one('td > span').get_text()
datas.append([name, current_price, change_direction, change_price])
print("종목 정보 추출 완료.")
# 5. 엑셀 파일로 저장 준비
write_wb = Workbook() # 새로운 엑셀 워크북(파일) 생성
# write_ws = write_wb.create_sheet('결과') # 새 시트 생성 (기본 시트 사용 시 이 줄은 생략 가능)
write_ws = write_wb.active # 기본 시트 사용
for data in datas:
write_ws.append(data)
write_wb.save(r'네이버_인기종목1.xlsx')
# 필요한 라이브러리를 가져옵니다.
import requests # 웹 페이지의 HTML 내용을 가져오기 위한 라이브러리
from bs4 import BeautifulSoup # HTML 내용을 파싱(분석)하여 필요한 데이터를 추출하기 위한 라이브러리
from openpyxl import Workbook # 엑셀 파일을 만들고 데이터를 쓰기 위한 라이브러리
# import os # 파일 경로 관련 작업을 위해 필요할 수 있지만, 이 코드에서는 직접 사용되지 않습니다.
# 1. 정보를 가져올 웹 페이지(URL)를 설정합니다.
url = 'https://finance.naver.com/'
print(f"정보를 가져올 웹 페이지: {url}") # 어떤 페이지에 접속할지 출력하여 확인합니다.
# 2. 설정된 URL로 웹 접속 요청을 보내고 응답을 받습니다.
response = requests.get(url)
# 3. 웹 접속 요청이 성공했는지 확인합니다. (상태 코드 200번대 외에는 오류 발생)
# raise_for_status()는 HTTP 오류 발생 시 예외를 발생시켜 프로그램이 멈추게 합니다.
response.raise_for_status()
# 4. 웹 접속으로 받은 응답에서 HTML 내용을 텍스트로 가져옵니다.
html = response.text
# 5. 가져온 HTML 텍스트를 BeautifulSoup 객체로 파싱합니다.
# 'html.parser'는 파이썬 표준 라이브러리에 포함된 HTML 파서입니다.
soup = BeautifulSoup(html, 'html.parser')
# 6. BeautifulSoup를 사용하여 원하는 데이터가 있는 HTML 요소를 찾습니다.
# select_one()은 CSS 선택자로 지정된 첫 번째 요소를 찾습니다.
# 이 선택자는 네이버 금융 메인 페이지의 인기 종목 테이블 본문(tbody)을 가리킵니다.
# 주의: 웹사이트 구조가 변경되면 이 선택자는 더 이상 작동하지 않을 수 있습니다.
tbody = soup.select_one('#container > div.aside > div.group_aside > div.aside_area.aside_popular > table > tbody')
# 7. 찾은 tbody 요소 안에서 모든 'tr'(테이블 행) 요소들을 찾습니다.
# 각 tr 요소는 하나의 종목 정보를 담고 있습니다.
trs = tbody.select('tr')
# 8. 추출한 종목 정보들을 저장할 빈 리스트를 생성합니다.
datas = []
# 9. 찾은 각 종목 행(tr)에 대해 반복하면서 필요한 데이터를 추출합니다.
for tr in trs: # 각 tr 요소를 순회합니다.
# 각 종목 행 안에서 종목 이름, 현재가, 등락 정보 등을 찾습니다.
# select_one()으로 특정 요소를 찾고, get_text()로 요소 안의 텍스트만 가져옵니다.
# 만약 해당 요소가 없으면 get_text() 호출 시 오류가 발생할 수 있습니다. (원래 코드의 잠재적 오류)
name_element = tr.select_one('th > a') # 종목 이름 (th 태그 안의 a 태그)
current_price_element = tr.select_one('td') # 현재가 (보통 첫 번째 td 태그)
change_price_element = tr.select_one('td > span') # 대비 가격 또는 등락률 (td 태그 안의 span 태그)
# 요소가 존재하는지 확인하고 텍스트를 가져옵니다. 없으면 'N/A' 등으로 처리하여 오류 방지 가능 (원래 코드는 오류 발생 가능)
# 이 코드에서는 원래 코드대로 오류 처리가 없이 바로 get_text()를 사용합니다.
name = name_element.get_text() # 종목 이름 텍스트 가져오기
current_price = current_price_element.get_text() # 현재가 텍스트 가져오기
# 등락 구분 정보는 tr 태그의 'class' 속성에 있습니다. (예: 'up', 'down', 'no_ch')
# tr['class']는 클래스 이름들의 리스트를 반환하고, [0]으로 첫 번째 클래스 이름을 가져옵니다.
change_direction = tr['class'][0]
change_price = change_price_element.get_text() # 대비 가격 또는 등락률 텍스트 가져오기
# 추출한 데이터를 리스트 형태로 만들고, datas 리스트에 추가합니다.
datas.append([name, current_price, change_direction, change_price])
# 10. 모든 종목 정보 추출이 완료되었음을 출력합니다.
print("종목 정보 추출 완료.")
# 11. 추출한 데이터를 저장할 새로운 엑셀 워크북(파일)을 생성합니다.
write_wb = Workbook()
# 12. 워크북에 '결과'라는 이름의 새로운 워크시트(Sheet)를 생성합니다.
# 또는 write_ws = write_wb.active 를 사용하여 기본 생성된 시트를 사용할 수도 있습니다.
write_ws = write_wb.create_sheet('결과')
# (선택 사항) 엑셀 파일의 첫 행에 데이터의 제목(헤더)을 추가하면 좋습니다.
# write_ws.append(['종목명', '현재가', '등락구분', '대비'])
# 13. 추출된 데이터 리스트(datas)에 대해 반복하면서 각 종목 데이터를 엑셀 시트에 추가합니다.
for data in datas: # datas 리스트의 각 항목(종목 데이터 리스트 [name, ...])에 대해 반복
write_ws.append(data) # 엑셀 시트에 새로운 행으로 데이터를 추가합니다.
# 14. 작성된 엑셀 워크북을 지정된 경로와 파일 이름으로 저장합니다.
# r'' 접두사는 경로 문자열 안에 역슬래시(\)가 특수 문자로 해석되지 않도록 합니다 (Windows 경로에 유용).
# 이 부분을 원하는 실제 파일 경로와 이름으로 변경해야 합니다.
write_wb.save(r'네이버_인기종목1.xlsx') # 현재 파이썬 스크립트 파일이 실행되는 폴더에 저장됩니다.
# (선택 사항) 저장이 완료되었음을 알리는 메시지를 추가합니다.
# print(f"엑셀 파일 '네이버_인기종목1.xlsx' 저장이 완료되었습니다.")
'Python' 카테고리의 다른 글
| 파이썬 openpyxl 사용법 (2) | 2025.05.19 |
|---|---|
| 파이썬 엑셀 다루기 - openpyxl 사용법 (0) | 2025.05.19 |
| pip란 무엇인가? (0) | 2025.05.19 |
| 파이썬 파일 CRUD 예제(memo.txt 파일 처리) (0) | 2025.05.14 |
| 파이썬 파일 CRUD 예제(예외처리 적용) (0) | 2025.05.14 |