아래는 네이버 금융의 시가총액 순위 1위부터 500위까지 데이터를 가져와 엑셀로 저장하는 Python 코드입니다.
requests를 사용하여 네이버 금융 페이지의 HTML을 가져옵니다.pandas.read_html()을 이용해 테이블을 추출합니다.market_cap_500.xlsx)로 저장합니다.import pandas as pd
import requests
from time import sleep
# 저장할 엑셀 파일명
excel_filename = "market_cap_500.xlsx"
# 네이버 금융 시가총액 페이지 URL (코스피 기준, sosok=0)
base_url = "https://finance.naver.com/sise/sise_market_sum.naver?sosok=0&page="
# HTTP 요청 헤더 (User-Agent 설정)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
# 데이터 저장 리스트
all_data = []
# 1페이지부터 10페이지까지 크롤링 (1~500위)
for page in range(1, 11):
url = base_url + str(page)
response = requests.get(url, headers=headers)
if response.status_code != 200:
print(f"페이지 {page} 가져오기 실패!")
continue
# HTML 테이블에서 데이터 추출
tables = pd.read_html(response.text)
if tables:
df = tables[1] # 두 번째 테이블이 시가총액 데이터
df = df.dropna(how="all") # 빈 행 제거
all_data.append(df)
print(f"페이지 {page} 크롤링 완료...")
sleep(1) # 서버 부하 방지를 위해 1초 대기
# 모든 페이지 데이터 합치기
final_df = pd.concat(all_data, ignore_index=True)
# 엑셀 파일로 저장
final_df.to_excel(excel_filename, index=False)
print(f"✅ 시가총액 1~500위 데이터가 '{excel_filename}' 파일로 저장되었습니다!") 네이버 금융 시가총액 페이지에서 1~10페이지(총 500개) 크롤링.
requests.get()에서 User-Agent 설정을 추가해 네이버 차단을 방지.pd.read_html()로 HTML 테이블을 추출, 필요 없는 빈 행 제거.sleep(1)을 사용해 서버 부하 방지.pandas.concat()으로 합쳐 엑셀 파일(market_cap_500.xlsx)로 저장.market_cap_500.xlsx 파일이 생성되며, 엑셀에서 시가총액 1위~500위 기업 리스트를 확인할 수 있습니다.
실제 데이터가 생성되었고 엑셀파일로 저장되었음을 확인할 수 있습니다.
중간에 헤더에 User-Agent는 왜 설정해둔걸까요?
User-Agent 설정 이유User-Agent는 브라우저 또는 요청을 보내는 클라이언트의 정보를 서버에 전달하는 HTTP 헤더입니다. 이 설정을 하는 이유는 다음과 같습니다.
네이버 금융(finance.naver.com)은 특정 요청이 봇(Bot) 또는 자동화 프로그램에서 왔다고 판단하면 403 Forbidden (접근 차단) 응답을 보낼 수 있습니다.
이를 방지하기 위해 일반 웹 브라우저에서 접근하는 것처럼 보이도록 User-Agent 값을 설정합니다.
requests 기본 User-Agent 차단 가능성Python의 requests 라이브러리를 사용하면 기본적으로 아래와 같은 User-Agent를 사용합니다.
python-requests/2.25.1 이 값은 웹사이트에서 자동화된 봇 요청으로 인식될 가능성이 큽니다.
따라서, Chrome 브라우저의 User-Agent 값을 사용하여 사람이 접속한 것처럼 속이는 것이 중요합니다.
User-Agent 없이도 동작할까?✔️ 네이버 금융의 크롤링 정책은 변경될 수 있으므로, 일부 경우에는 동작할 수도 있고, 일부 경우에는 차단될 수도 있습니다.
✔️ 만약 User-Agent 없이 실행했을 때 정상적으로 동작하면 굳이 추가할 필요는 없습니다. 하지만 장기적으로 안정성을 확보하려면 User-Agent를 설정하는 것이 좋습니다.
아래 두 가지 코드로 비교해보세요.
User-Agent 없이 실행import requests
url = "https://finance.naver.com/sise/sise_market_sum.naver?sosok=0&page=1"
response = requests.get(url)
print(response.status_code) # 정상적으로 작동하면 200, 차단되면 403 또는 다른 코드가 나옴
print(response.text[:500]) # 응답 HTML 일부 확인 User-Agent 추가 후 실행import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.text[:500]) User-Agent 없이도 동작할 수도 있지만, 차단될 가능성이 있으므로 설정하는 것이 권장됨.User-Agent를 추가하는 것이 좋음.403 Forbidden 오류가 발생하면, User-Agent를 설정한 후 다시 시도하면 정상적으로 동작할 가능성이 큼.🚀 따라서 User-Agent 설정을 추가하는 것이 가장 안전한 방법입니다.
요양원 선택 전 반드시 확인해야 할 체크리스트를 공개합니다. 공식 평가 자료 조회법, 방문 시 확인…
공공기관 채용 비리의 실태와 피해 지원자의 대응법을 정리했습니다. 채용 비리 신고 방법, 공익신고자 보호제도, 취준생…
주식 손실을 세금 절약에 활용하는 합법적 방법을 공개합니다. 해외주식 손익통산, ISA 계좌 활용, 연금계좌 절세까지…
배달이 예상 시간보다 크게 늦으면 취소·환불을 요청할 수 있습니다. 배달앱별 지연 취소 방법과 잘못 배달됐을…
통신비 절약의 핵심은 요금제 최적화입니다. 내 데이터 사용량 확인법, 알뜰폰 전환 비교, 위약금 없이 요금제…