본문 바로가기
데이터분석/Pandas

[Python] Pandas 09 _ daum_site

by nemonemonemo 2025. 8. 21.

웹 사이트에 있는 데이터를 수집하려고 할 때!!!

    1. api : best
    1. 일반적인 사이트
    • 2-0) 아주 투명한 친구들 : 주소도 뭔가 원한느 입력에 바로 반응..별 허들X
    • 2-1) DART : 주소가 숨겨져 있는 친구들!!! --> 이리저러 찾아야 함!!
    • 2-2) daum
      • 금융
        • 숨겨진 주소를 찾아서 해도 안 될 때가 존재함
        • 웹브라우저에서는 동작 but 코드는 안 될 때
          • user-agent : 접속하는 sw
          • referer : 해당 주소를 어느 주소에서 호출
          • 쿠키 …
    • 브라우저 기반으로 내가 코드로 제어 : 셀레니움 ( 접속, 로그인 )
      • 큰 틀
        • 셀레니움( 접속, 로그인 )
        • 내부 : requests/ urllib 코드쏘면서 진행..…
        • ⇒ 이런 부분들은 정답이 없다!
import urllib.request


url = 'https://finance.daum.net/'
res = urllib.request.urlopen(url)
res.read().decode("utf-8")
'''
<!DOCTYPE html>
<html lang="ko" class="os_mac"><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta property="og:site_name" content="다음금융" />
<meta property="og:image" content="https://t1.daumcdn.net/media/finance/images/finance_og_250113.png" />
<link rel="shortcut icon" href="https://t1.daumcdn.net/top/favicon/20241223/daum.ico">

	<title>다음 금융</title>

<link rel="stylesheet" type="text/css" href="https://t1.daumcdn.net/media/kraken/finance/resources/dist/250717161801/commonCSSBundle.merged.css" />

<script src="https://t1.daumcdn.net/media/kraken/finance/resources/dist/250717161801/pcFramework.merged.js"></script>

<script>
	window.REQUEST_URI = '/home';
	window.CURRENT_URL = encodeURIComponent(
		"".concat(
			window.location.protocol,
			"//",
			window.location.host,
			window.location.pathname,
			window.location.search
		)
	);

	window.FINANCE = {};
	window.FINANCE.API_URL = '';
	window.FINANCE._PERIOD = '';
	window.FINANCE.DAUM_NEWS_HOST = 'https://v.daum.net/v';
	window.FINANCE.BOARD_HOST = 'https://board2.finance.daum.net';
	window.FINANCE.WISE_FN_HOST = 'https://wisefn.finance.daum.net/v1';
</script>

<script type="text/javascript" src="https://t1.daumcdn.net/tiara/js/v1/tiara.min.js"></script>

</head>
<body class="finance">
	<div id="wrap">
<div id="kakaoWrap">
	<div id="wrapMinidaum"></div>
</div>

<script src="https://t1.daumcdn.net/media/kraken/finance/resources/dist/250717161801/miniDaum.merged.js"></script>

<div class="header">
	<div class="head_media f_clear">
		<h1><a href="/" id="kakaoServiceLogo" class="#gnb #default #service_finance"><span class="ir_wa">금융</span></a></h1>
		<strong class="screen_out">관련서비스</strong>
		<h2 class="screen_out">검색</h2>
		<div class="search_news" id="boxSearch"></div>
		<script src="https://t1.daumcdn.net/media/kraken/finance/resources/dist/250717161801/searchBundle.merged.js"></script>
	</div>
	<div id="kakaoGnb" role="navigation">
		<div class="inner_gnb">
			<h2 class="screen_out">금융 메인메뉴</h2>
			<ul class="gnb_comm">
				<li class="on">
					<a href="/" class="link_gnb link_gnb1">
						<span class="screen_out">선택됨</span>
						<span class="ir_wa">홈</span>
						<span class="bar_gnb"><span class="inner_bar"></span></span>
					</a>
				</li>
				<li class="">
					<a href="/domestic" class="link_gnb link_gnb2">
						<span class="ir_wa">국내</span>
						<span class="bar_gnb"><span class="inner_bar"></span></span>
					</a>
				</li>
				<li class="">
					<a href="/global" class="link_gnb link_gnb3">
						<span class="ir_wa">해외</span>
						<span class="bar_gnb"><span class="inner_bar"></span></span>
					</a>
				</li>
				<li class="">
					<a href="/news" class="link_gnb link_gnb4">
						<span class="ir_wa">뉴스</span>
						<span class="bar_gnb"><span class="inner_bar"></span></span>
					</a>
				</li>
				<li class="">
					<a href="/investment" class="link_gnb link_gnb5">
						<span class="ir_wa">투자정보</span>
						<span class="bar_gnb"><span class="inner_bar"></span></span>
					</a>
				</li>
				<li class="">
					<a href="/talks" class="link_gnb link_gnb6">
						<span class="ir_wa">종목토론</span>
						<span class="bar_gnb"><span class="inner_bar"></span></span>
					</a>
				</li>
				<li class="">
					<a href="/my" class="link_gnb link_gnb8">
						<span class="ir_wa">MY</span>
						<span class="bar_gnb"><span class="inner_bar"></span></span>
					</a>
				</li>
			</ul>
			<div class="gnb_etc">
				<ul class="gnb_with">
					<li class="">
						<a href="/exchanges" class="link_gnb link_gnb1">
							<span class="ir_wa">환율</span>
							<span class="bar_gnb"><span class="inner_bar"></span></span>
						</a>
					</li>
				</ul>
			</div>
		</div>
	</div>
</div>
<div id="notice"></div>



<link rel="stylesheet" type="text/css" href="https://t1.daumcdn.net/media/kraken/finance/resources/dist/250717161801/layerpopupCSS.merged.css" />
<div class="stockB" id="boxTodayIndexes">
	<div class="center">
		<div class="stock" id="boxIndexes"></div>
		<div class="stockTab" id="boxIndexTabs">
			<span>
				<h4>오늘의 증시</h4>
				<p id="labTodayDate"></p>
				<p id="labGlobalTodayDate">현지시간 기준</p>
			</span>
			<ul>
				<li><a href="javascript:void(0)" data-type="DOMESTIC" class="on" title="국내 지수">국내 지수</a></li>
				<li><a href="javascript:void(0)" data-type="USA" title="미국 지수">미국 지수</a></li>
				<li><a href="javascript:void(0)" data-type="ASIA" title="아시아 지수">아시아 지수</a></li>
				<li><a href="javascript:void(0)" data-type="EUROPE" title="유럽 지수">유럽 지수</a></li>
			</ul>
		</div>
	</div>
</div>
<div class="mainB">
	<div class="leftW">
		<div class="topNews" id="boxTodayNews"></div>
		<div class="rankingB" id="boxBestSearchs"></div>
		<div class="rankingB line" id="boxTopSectors">
		</div>
	</div>
	<div class="rightW" id="boxRightSidebar">
		<div class="btnB">
			<a href="javascript:void(0)" title="전 종목 시세 보기" id="btnAllQuotes"><i>-</i>전 종목 시세 보기</a>
		</div>
		<div class="myB" id="boxMy"></div>
		<div class="sponsor"></div>
	</div>
</div>
<div class="investmentB">
	<div class="center" id="boxColumns">
	</div>
</div>
<div class="mainB last">
	<div class="leftW max">
		<div class="rankingB" id="boxMarketTrend"></div>
	</div>
</div>

<script src="https://t1.daumcdn.net/media/kraken/finance/resources/dist/250717161801/homeBundle.merged.js"></script>



		<div class="footer">
	<span>
		<div class="fl">
			<ul>
				<li><a target='_blank' href="http://policy.daum.net/info/info" title="서비스 약관/정책">서비스 약관/정책</a></li>
				<li><a target='_blank' href="http://cs.daum.net/faq/19.html" title="금융 고객센터">금융 고객센터</a></li>
				<li><a target='_blank' href="https://cs.daum.net/question/19.html" title="금융 문의하기">금융 문의하기</a></li>
			</ul>
			<p>카카오가 제공하는 증권정보는 단순히 정보의 제공을 목적으로 하고 있으며, 사이트에서 제공되는 정보는 오류 및 지연이<br>발생될 수 있습니다. 제공된 정보이용에 따르는 책임은 이용자 본인에게 있으며, 카카오는 이용자의 투자결과에 따른<br>법적 책임을 지지 않습니다.</p>
		</div>
		<div class="fr">
			<p>위 내용에 대한 저작권 및 법적 책임은 자료제공사 또는<br>글쓴이에 있으며 카카오의 입장과 다를 수 있습니다.</p>
			<p>Copyright (C) Kakao Corp. All rights reserved.</p>
		</div>
	</span>

	</div>



<script>
	window._TIARA_OPTIONS = {
		section: '홈',
		page: '홈'
	}
</script>

<script src="https://t1.daumcdn.net/media/kraken/finance/resources/dist/250717161801/tiara.merged.js"></script>

	</div>
</body>
</html>
'''

⇒ 에러는 안 나고 잘 접속이 도고 뭔가 정보를 주긴 했는데 알맹이가 아니라 껍데기를 줬음


https://finance.daum.net/api/search/ranks?limit=10

  • 찾은 인기 종목 10종목에 대한 정보를 요청하는 주소를 찾아냈음!!
  • 브라우저에 실행!!! 잘 됨!!!

url = '<https://finance.daum.net/api/search/ranks?limit=10>'
res = urllib.request.urlopen(url)
res.read().decode("utf-8")
'''
{
  "data" : [ {
    "rank" : 1,
    "rankChange" : 0,
    "symbolCode" : "A034020",
    "shortCode" : "A034020",
    "code" : "KR7034020008",
    "name" : "두산에너빌리티",
    "isNew" : false,
    "tradePrice" : 61500,
    "change" : "RISE",
    "changePrice" : 4100,
    "changeRate" : 0.0714285714,
    "signedChangeRate" : 0.0714285714,
    "accTradeVolume" : 17052577,
    "accTradePrice" : 1039924462500,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A034020#talks>"
  }, {
    "rank" : 2,
    "rankChange" : 2,
    "symbolCode" : "A192820",
    "shortCode" : "A192820",
    "code" : "KR7192820009",
    "name" : "코스맥스",
    "isNew" : false,
    "tradePrice" : 213500,
    "change" : "RISE",
    "changePrice" : 8000,
    "changeRate" : 0.0389294404,
    "signedChangeRate" : 0.0389294404,
    "accTradeVolume" : 281843,
    "accTradePrice" : 60355787500,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A192820#talks>"
  }, {
    "rank" : 3,
    "rankChange" : -1,
    "symbolCode" : "A005930",
    "shortCode" : "A005930",
    "code" : "KR7005930003",
    "name" : "삼성전자",
    "isNew" : false,
    "tradePrice" : 71250,
    "change" : "RISE",
    "changePrice" : 750,
    "changeRate" : 0.0106382979,
    "signedChangeRate" : 0.0106382979,
    "accTradeVolume" : 14472170,
    "accTradePrice" : 1036072967600,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A005930#talks>"
  }, {
    "rank" : 4,
    "rankChange" : -1,
    "symbolCode" : "A000660",
    "shortCode" : "A000660",
    "code" : "KR7000660001",
    "name" : "SK하이닉스",
    "isNew" : false,
    "tradePrice" : 245500,
    "change" : "FALL",
    "changePrice" : -10000,
    "changeRate" : -0.0391389432,
    "signedChangeRate" : -0.0391389432,
    "accTradeVolume" : 4709693,
    "accTradePrice" : 1165269776250,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A000660#talks>"
  }, {
    "rank" : 5,
    "rankChange" : 0,
    "symbolCode" : "A103140",
    "shortCode" : "A103140",
    "code" : "KR7103140000",
    "name" : "풍산",
    "isNew" : false,
    "tradePrice" : 115900,
    "change" : "RISE",
    "changePrice" : 1200,
    "changeRate" : 0.010462075,
    "signedChangeRate" : 0.010462075,
    "accTradeVolume" : 169015,
    "accTradePrice" : 19846896050,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A103140#talks>"
  }, {
    "rank" : 6,
    "rankChange" : 0,
    "symbolCode" : "A000210",
    "shortCode" : "A000210",
    "code" : "KR7000210005",
    "name" : "DL",
    "isNew" : false,
    "tradePrice" : 38400,
    "change" : "RISE",
    "changePrice" : 1200,
    "changeRate" : 0.0322580645,
    "signedChangeRate" : 0.0322580645,
    "accTradeVolume" : 114034,
    "accTradePrice" : 4391087900,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A000210#talks>"
  }, {
    "rank" : 7,
    "rankChange" : 0,
    "symbolCode" : "A035720",
    "shortCode" : "A035720",
    "code" : "KR7035720002",
    "name" : "카카오",
    "isNew" : false,
    "tradePrice" : 63600,
    "change" : "FALL",
    "changePrice" : -1700,
    "changeRate" : -0.0260336907,
    "signedChangeRate" : -0.0260336907,
    "accTradeVolume" : 3607494,
    "accTradePrice" : 236126079850,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A035720#talks>"
  }, {
    "rank" : 8,
    "rankChange" : 1,
    "symbolCode" : "A272210",
    "shortCode" : "A272210",
    "code" : "KR7272210006",
    "name" : "한화시스템",
    "isNew" : false,
    "tradePrice" : 50800,
    "change" : "RISE",
    "changePrice" : 1550,
    "changeRate" : 0.0314720812,
    "signedChangeRate" : 0.0314720812,
    "accTradeVolume" : 758969,
    "accTradePrice" : 38540105750,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A272210#talks>"
  }, {
    "rank" : 9,
    "rankChange" : 0,
    "symbolCode" : "A439260",
    "shortCode" : "A439260",
    "code" : "KR7439260001",
    "name" : "대한조선",
    "isNew" : true,
    "tradePrice" : 92700,
    "change" : "RISE",
    "changePrice" : 10200,
    "changeRate" : 0.1236363636,
    "signedChangeRate" : 0.1236363636,
    "accTradeVolume" : 2006478,
    "accTradePrice" : 183337929050,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A439260#talks>"
  }, {
    "rank" : 10,
    "rankChange" : 0,
    "symbolCode" : "A0010V0",
    "shortCode" : "A0010V0",
    "code" : "KR70010V0005",
    "name" : "제이피아이헬스케어",
    "isNew" : true,
    "tradePrice" : 23100,
    "change" : "RISE",
    "changePrice" : 3100,
    "changeRate" : 0.155,
    "signedChangeRate" : 0.155,
    "accTradeVolume" : 13598091,
    "accTradePrice" : 372657256050,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A0010V0#talks>"
  } ]
}
'''

위 코드에서 응답에 대한 결과가 403에러가 나올 때가 있음;;;;(접근 권한 없음!!)

  • 시도할 부분 : user-agent/ referer

# urllib에서는
url = '<https://finance.daum.net/api/search/ranks?limit=10>'
req = urllib.request.Request(
        url,
        data =None,
        # --> 개발자 도구 : 네트워크 --> refer,,user-agent 쪽,,,
        headers ={
            "refere" : "<https://finance.daum.net/>",
            "user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"
        }
)
res = urllib.request.urlopen(req).read().decode("utf-8")
res
'''
{
  "data" : [ {
    "rank" : 1,
    "rankChange" : 0,
    "symbolCode" : "A034020",
    "shortCode" : "A034020",
    "code" : "KR7034020008",
    "name" : "두산에너빌리티",
    "isNew" : false,
    "tradePrice" : 61800,
    "change" : "RISE",
    "changePrice" : 4400,
    "changeRate" : 0.0766550523,
    "signedChangeRate" : 0.0766550523,
    "accTradeVolume" : 17110348,
    "accTradePrice" : 1043489103400,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A034020#talks>"
  }, {
    "rank" : 2,
    "rankChange" : 1,
    "symbolCode" : "A005930",
    "shortCode" : "A005930",
    "code" : "KR7005930003",
    "name" : "삼성전자",
    "isNew" : false,
    "tradePrice" : 71100,
    "change" : "RISE",
    "changePrice" : 600,
    "changeRate" : 0.0085106383,
    "signedChangeRate" : 0.0085106383,
    "accTradeVolume" : 14672486,
    "accTradePrice" : 1050335945800,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A005930#talks>"
  }, {
    "rank" : 3,
    "rankChange" : 1,
    "symbolCode" : "A000660",
    "shortCode" : "A000660",
    "code" : "KR7000660001",
    "name" : "SK하이닉스",
    "isNew" : false,
    "tradePrice" : 246250,
    "change" : "FALL",
    "changePrice" : -9250,
    "changeRate" : -0.0362035225,
    "signedChangeRate" : -0.0362035225,
    "accTradeVolume" : 4853038,
    "accTradePrice" : 1200494380500,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A000660#talks>"
  }, {
    "rank" : 4,
    "rankChange" : -2,
    "symbolCode" : "A192820",
    "shortCode" : "A192820",
    "code" : "KR7192820009",
    "name" : "코스맥스",
    "isNew" : false,
    "tradePrice" : 213500,
    "change" : "RISE",
    "changePrice" : 8000,
    "changeRate" : 0.0389294404,
    "signedChangeRate" : 0.0389294404,
    "accTradeVolume" : 285167,
    "accTradePrice" : 61066039500,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A192820#talks>"
  }, {
    "rank" : 5,
    "rankChange" : 0,
    "symbolCode" : "A103140",
    "shortCode" : "A103140",
    "code" : "KR7103140000",
    "name" : "풍산",
    "isNew" : false,
    "tradePrice" : 116000,
    "change" : "RISE",
    "changePrice" : 1300,
    "changeRate" : 0.0113339146,
    "signedChangeRate" : 0.0113339146,
    "accTradeVolume" : 169755,
    "accTradePrice" : 19932656750,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A103140#talks>"
  }, {
    "rank" : 6,
    "rankChange" : 0,
    "symbolCode" : "A000210",
    "shortCode" : "A000210",
    "code" : "KR7000210005",
    "name" : "DL",
    "isNew" : false,
    "tradePrice" : 38200,
    "change" : "RISE",
    "changePrice" : 1000,
    "changeRate" : 0.0268817204,
    "signedChangeRate" : 0.0268817204,
    "accTradeVolume" : 115585,
    "accTradePrice" : 4450454950,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A000210#talks>"
  }, {
    "rank" : 7,
    "rankChange" : 2,
    "symbolCode" : "A439260",
    "shortCode" : "A439260",
    "code" : "KR7439260001",
    "name" : "대한조선",
    "isNew" : false,
    "tradePrice" : 92400,
    "change" : "RISE",
    "changePrice" : 9900,
    "changeRate" : 0.12,
    "signedChangeRate" : 0.12,
    "accTradeVolume" : 2022011,
    "accTradePrice" : 184773454800,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A439260#talks>"
  }, {
    "rank" : 8,
    "rankChange" : -1,
    "symbolCode" : "A035720",
    "shortCode" : "A035720",
    "code" : "KR7035720002",
    "name" : "카카오",
    "isNew" : false,
    "tradePrice" : 63600,
    "change" : "FALL",
    "changePrice" : -1700,
    "changeRate" : -0.0260336907,
    "signedChangeRate" : -0.0260336907,
    "accTradeVolume" : 3635046,
    "accTradePrice" : 237878530200,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A035720#talks>"
  }, {
    "rank" : 9,
    "rankChange" : -1,
    "symbolCode" : "A272210",
    "shortCode" : "A272210",
    "code" : "KR7272210006",
    "name" : "한화시스템",
    "isNew" : false,
    "tradePrice" : 50800,
    "change" : "RISE",
    "changePrice" : 1550,
    "changeRate" : 0.0314720812,
    "signedChangeRate" : 0.0314720812,
    "accTradeVolume" : 770296,
    "accTradePrice" : 39115858050,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A272210#talks>"
  }, {
    "rank" : 10,
    "rankChange" : 0,
    "symbolCode" : "A201490",
    "shortCode" : "A201490",
    "code" : "KR7201490000",
    "name" : "미투온",
    "isNew" : true,
    "tradePrice" : 6160,
    "change" : "FALL",
    "changePrice" : -200,
    "changeRate" : -0.0314465409,
    "signedChangeRate" : -0.0314465409,
    "accTradeVolume" : 7103715,
    "accTradePrice" : 44443828500,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A201490#talks>"
  } ]
}
'''
import requests
# urllib에서는
url = '<https://finance.daum.net/api/search/ranks?limit=10>'
headers ={
        "refere" : "<https://finance.daum.net/>",
        "user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"
        }

res = requests.get(url, headers = headers)
temp = res.text
temp # ==> 받은 정보를 그냥  text로 뽑아내는 역할
'''
{
  "data" : [ {
    "rank" : 1,
    "rankChange" : 0,
    "symbolCode" : "A034020",
    "shortCode" : "A034020",
    "code" : "KR7034020008",
    "name" : "두산에너빌리티",
    "isNew" : false,
    "tradePrice" : 61600,
    "change" : "RISE",
    "changePrice" : 4200,
    "changeRate" : 0.0731707317,
    "signedChangeRate" : 0.0731707317,
    "accTradeVolume" : 17157796,
    "accTradePrice" : 1046414011550,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A034020#talks>"
  }, {
    "rank" : 2,
    "rankChange" : 1,
    "symbolCode" : "A005930",
    "shortCode" : "A005930",
    "code" : "KR7005930003",
    "name" : "삼성전자",
    "isNew" : false,
    "tradePrice" : 71100,
    "change" : "RISE",
    "changePrice" : 600,
    "changeRate" : 0.0085106383,
    "signedChangeRate" : 0.0085106383,
    "accTradeVolume" : 14698210,
    "accTradePrice" : 1052165488800,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A005930#talks>"
  }, {
    "rank" : 3,
    "rankChange" : 1,
    "symbolCode" : "A000660",
    "shortCode" : "A000660",
    "code" : "KR7000660001",
    "name" : "SK하이닉스",
    "isNew" : false,
    "tradePrice" : 245750,
    "change" : "FALL",
    "changePrice" : -9750,
    "changeRate" : -0.0381604697,
    "signedChangeRate" : -0.0381604697,
    "accTradeVolume" : 4886608,
    "accTradePrice" : 1208751824000,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A000660#talks>"
  }, {
    "rank" : 4,
    "rankChange" : -2,
    "symbolCode" : "A192820",
    "shortCode" : "A192820",
    "code" : "KR7192820009",
    "name" : "코스맥스",
    "isNew" : false,
    "tradePrice" : 213500,
    "change" : "RISE",
    "changePrice" : 8000,
    "changeRate" : 0.0389294404,
    "signedChangeRate" : 0.0389294404,
    "accTradeVolume" : 287520,
    "accTradePrice" : 61568542250,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A192820#talks>"
  }, {
    "rank" : 5,
    "rankChange" : 0,
    "symbolCode" : "A103140",
    "shortCode" : "A103140",
    "code" : "KR7103140000",
    "name" : "풍산",
    "isNew" : false,
    "tradePrice" : 115800,
    "change" : "RISE",
    "changePrice" : 1100,
    "changeRate" : 0.0095902354,
    "signedChangeRate" : 0.0095902354,
    "accTradeVolume" : 170408,
    "accTradePrice" : 20008291150,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A103140#talks>"
  }, {
    "rank" : 6,
    "rankChange" : 0,
    "symbolCode" : "A000210",
    "shortCode" : "A000210",
    "code" : "KR7000210005",
    "name" : "DL",
    "isNew" : false,
    "tradePrice" : 38200,
    "change" : "RISE",
    "changePrice" : 1000,
    "changeRate" : 0.0268817204,
    "signedChangeRate" : 0.0268817204,
    "accTradeVolume" : 116114,
    "accTradePrice" : 4470659200,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A000210#talks>"
  }, {
    "rank" : 7,
    "rankChange" : 2,
    "symbolCode" : "A439260",
    "shortCode" : "A439260",
    "code" : "KR7439260001",
    "name" : "대한조선",
    "isNew" : false,
    "tradePrice" : 93700,
    "change" : "RISE",
    "changePrice" : 11200,
    "changeRate" : 0.1357575758,
    "signedChangeRate" : 0.1357575758,
    "accTradeVolume" : 2060029,
    "accTradePrice" : 188327295200,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A439260#talks>"
  }, {
    "rank" : 8,
    "rankChange" : -1,
    "symbolCode" : "A035720",
    "shortCode" : "A035720",
    "code" : "KR7035720002",
    "name" : "카카오",
    "isNew" : false,
    "tradePrice" : 63500,
    "change" : "FALL",
    "changePrice" : -1800,
    "changeRate" : -0.0275650842,
    "signedChangeRate" : -0.0275650842,
    "accTradeVolume" : 3646183,
    "accTradePrice" : 238586074750,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A035720#talks>"
  }, {
    "rank" : 9,
    "rankChange" : -1,
    "symbolCode" : "A272210",
    "shortCode" : "A272210",
    "code" : "KR7272210006",
    "name" : "한화시스템",
    "isNew" : false,
    "tradePrice" : 50900,
    "change" : "RISE",
    "changePrice" : 1650,
    "changeRate" : 0.0335025381,
    "signedChangeRate" : 0.0335025381,
    "accTradeVolume" : 776885,
    "accTradePrice" : 39450920150,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A272210#talks>"
  }, {
    "rank" : 10,
    "rankChange" : 0,
    "symbolCode" : "A201490",
    "shortCode" : "A201490",
    "code" : "KR7201490000",
    "name" : "미투온",
    "isNew" : true,
    "tradePrice" : 6150,
    "change" : "FALL",
    "changePrice" : -210,
    "changeRate" : -0.0330188679,
    "signedChangeRate" : -0.0330188679,
    "accTradeVolume" : 7117507,
    "accTradePrice" : 44528751635,
    "chartSlideImage" : null,
    "boardUrl" : "<https://finance.daum.net/quotes/A201490#talks>"
  } ]
}
'''

temp = res.json() # --> json 패키지를 적용해서,,
temp
'''
{'data': [{'rank': 1,
   'rankChange': 0,
   'symbolCode': 'A034020',
   'shortCode': 'A034020',
   'code': 'KR7034020008',
   'name': '두산에너빌리티',
   'isNew': False,
   'tradePrice': 61600,
   'change': 'RISE',
   'changePrice': 4200,
   'changeRate': 0.0731707317,
   'signedChangeRate': 0.0731707317,
   'accTradeVolume': 17157796,
   'accTradePrice': 1046414011550,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A034020#talks>'},
  {'rank': 2,
   'rankChange': 1,
   'symbolCode': 'A005930',
   'shortCode': 'A005930',
   'code': 'KR7005930003',
   'name': '삼성전자',
   'isNew': False,
   'tradePrice': 71100,
   'change': 'RISE',
   'changePrice': 600,
   'changeRate': 0.0085106383,
   'signedChangeRate': 0.0085106383,
   'accTradeVolume': 14698210,
   'accTradePrice': 1052165488800,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A005930#talks>'},
  {'rank': 3,
   'rankChange': 1,
   'symbolCode': 'A000660',
   'shortCode': 'A000660',
   'code': 'KR7000660001',
   'name': 'SK하이닉스',
   'isNew': False,
   'tradePrice': 245750,
   'change': 'FALL',
   'changePrice': -9750,
   'changeRate': -0.0381604697,
   'signedChangeRate': -0.0381604697,
   'accTradeVolume': 4886608,
   'accTradePrice': 1208751824000,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A000660#talks>'},
  {'rank': 4,
   'rankChange': -2,
   'symbolCode': 'A192820',
   'shortCode': 'A192820',
   'code': 'KR7192820009',
   'name': '코스맥스',
   'isNew': False,
   'tradePrice': 213500,
   'change': 'RISE',
   'changePrice': 8000,
   'changeRate': 0.0389294404,
   'signedChangeRate': 0.0389294404,
   'accTradeVolume': 287520,
   'accTradePrice': 61568542250,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A192820#talks>'},
  {'rank': 5,
   'rankChange': 0,
   'symbolCode': 'A103140',
   'shortCode': 'A103140',
   'code': 'KR7103140000',
   'name': '풍산',
   'isNew': False,
   'tradePrice': 115800,
   'change': 'RISE',
   'changePrice': 1100,
   'changeRate': 0.0095902354,
   'signedChangeRate': 0.0095902354,
   'accTradeVolume': 170408,
   'accTradePrice': 20008291150,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A103140#talks>'},
  {'rank': 6,
   'rankChange': 0,
   'symbolCode': 'A000210',
   'shortCode': 'A000210',
   'code': 'KR7000210005',
   'name': 'DL',
   'isNew': False,
   'tradePrice': 38200,
   'change': 'RISE',
   'changePrice': 1000,
   'changeRate': 0.0268817204,
   'signedChangeRate': 0.0268817204,
   'accTradeVolume': 116114,
   'accTradePrice': 4470659200,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A000210#talks>'},
  {'rank': 7,
   'rankChange': 2,
   'symbolCode': 'A439260',
   'shortCode': 'A439260',
   'code': 'KR7439260001',
   'name': '대한조선',
   'isNew': False,
   'tradePrice': 93700,
   'change': 'RISE',
   'changePrice': 11200,
   'changeRate': 0.1357575758,
   'signedChangeRate': 0.1357575758,
   'accTradeVolume': 2060029,
   'accTradePrice': 188327295200,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A439260#talks>'},
  {'rank': 8,
   'rankChange': -1,
   'symbolCode': 'A035720',
   'shortCode': 'A035720',
   'code': 'KR7035720002',
   'name': '카카오',
   'isNew': False,
   'tradePrice': 63500,
   'change': 'FALL',
   'changePrice': -1800,
   'changeRate': -0.0275650842,
   'signedChangeRate': -0.0275650842,
   'accTradeVolume': 3646183,
   'accTradePrice': 238586074750,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A035720#talks>'},
  {'rank': 9,
   'rankChange': -1,
   'symbolCode': 'A272210',
   'shortCode': 'A272210',
   'code': 'KR7272210006',
   'name': '한화시스템',
   'isNew': False,
   'tradePrice': 50900,
   'change': 'RISE',
   'changePrice': 1650,
   'changeRate': 0.0335025381,
   'signedChangeRate': 0.0335025381,
   'accTradeVolume': 776885,
   'accTradePrice': 39450920150,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A272210#talks>'},
  {'rank': 10,
   'rankChange': 0,
   'symbolCode': 'A201490',
   'shortCode': 'A201490',
   'code': 'KR7201490000',
   'name': '미투온',
   'isNew': True,
   'tradePrice': 6150,
   'change': 'FALL',
   'changePrice': -210,
   'changeRate': -0.0330188679,
   'signedChangeRate': -0.0330188679,
   'accTradeVolume': 7117507,
   'accTradePrice': 44528751635,
   'chartSlideImage': None,
   'boardUrl': '<https://finance.daum.net/quotes/A201490#talks>'}]}

'''

# 순위, 종목, 현재 가격 10개 출력해보자!!
for i in temp["data"]:
    print(i["rank"],i["name"],i["tradePrice"])
'''
1 두산에너빌리티 61600
2 삼성전자 71100
3 SK하이닉스 245750
4 코스맥스 213500
5 풍산 115800
6 DL 38200
7 대한조선 93700
8 카카오 63500
9 한화시스템 50900
10 미투온 6150
'''

업종 상위 하위

url = '<https://finance.daum.net/api/sector/wics?perPage=5&order=desc>'
res = urllib.request.urlopen(url)
res.read().decode("utf-8")
'''
HTTPError: HTTP Error 403: 
'''

# urllib에서는
url = '<https://finance.daum.net/api/sector/wics?perPage=5&order=desc>'
headers ={
            "referer" : "<https://finance.daum.net/>",
            "user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"
        }
res = requests.get( url, headers=headers)
temp = res.text
temp # ==> 받은 정보를 그냥 text로 뽑아내는 역할
'''
{"code":200,"message":"OK","data":[{"accTradeVolume":1197570,"accTradePrice":52238017347.000,"change":"RISE","sectorCode":"G404020","sectorName":"생명보험","changeRate":0.0578974884,"stockCount":5,"includedStocks":[{"code":"KR7032830002","symbolCode":"A032830","name":"삼성생명","change":"RISE","changeRate":0.0685670262,"tradePrice":138700.000,"changePrice":8900.000,"accTradeVolume":362439,"accTradePrice":49013557000.000,"marketCap":27740000000000,"foreignRatio":0.219101865},{"code":"KR7085620003","symbolCode":"A085620","name":"미래에셋생명","change":"RISE","changeRate":0.0112359551,"tradePrice":7200.000,"changePrice":80.000,"accTradeVolume":50253,"accTradePrice":363754775.000,"marketCap":1274516560800,"foreignRatio":0.0120385769}]},{"accTradeVolume":31919740,"accTradePrice":17772990584.000,"change":"RISE","sectorCode":"G151060","sectorName":"종이와목재","changeRate":0.0467818863,"stockCount":14,"includedStocks":[{"code":"KR7078130002","symbolCode":"A078130","name":"국일제지","change":"RISE","changeRate":0.1545064378,"tradePrice":538.000,"changePrice":72.000,"accTradeVolume":31559888,"accTradePrice":17038246223.000,"marketCap":606544358598,"foreignRatio":0.0029136384},{"code":"KR7002820009","symbolCode":"A002820","name":"SUN&L","change":"RISE","changeRate":0.0184162063,"tradePrice":2765.000,"changePrice":50.000,"accTradeVolume":4317,"accTradePrice":11998280.000,"marketCap":34861089585,"foreignRatio":0.0078267835}]},{"accTradeVolume":22024,"accTradePrice":1707194150.000,"change":"RISE","sectorCode":"G551030","sectorName":"복합유틸리티","changeRate":0.0427807487,"stockCount":1,"includedStocks":[{"code":"KR7071320006","symbolCode":"A071320","name":"지역난방공사","change":"RISE","changeRate":0.0427807487,"tradePrice":78000.000,"changePrice":3200.000,"accTradeVolume":22024,"accTradePrice":1707194150.000,"marketCap":903142032000,"foreignRatio":0.0478498359}]},{"accTradeVolume":7340962,"accTradePrice":399558557275.000,"change":"RISE","sectorCode":"G551010","sectorName":"전기유틸리티","changeRate":0.039175649,"stockCount":5,"includedStocks":[{"code":"KR7052690005","symbolCode":"A052690","name":"한전기술","change":"RISE","changeRate":0.1425287356,"tradePrice":99400.000,"changePrice":12400.000,"accTradeVolume":2123213,"accTradePrice":210738703300.000,"marketCap":3799068000000,"foreignRatio":0.1074997645},{"code":"KR7051600005","symbolCode":"A051600","name":"한전KPS","change":"RISE","changeRate":0.0502564103,"tradePrice":51200.000,"changePrice":2450.000,"accTradeVolume":408096,"accTradePrice":20876683825.000,"marketCap":2304000000000,"foreignRatio":0.1199900667}]},{"accTradeVolume":20073778,"accTradePrice":797398015366.000,"change":"RISE","sectorCode":"G201065","sectorName":"조선","changeRate":0.0336567967,"stockCount":30,"includedStocks":[{"code":"KR7439260001","symbolCode":"A439260","name":"대한조선","change":"RISE","changeRate":0.143030303,"tradePrice":94300.000,"changePrice":11800.000,"accTradeVolume":2137716,"accTradePrice":195635167650.000,"marketCap":3633031221600,"foreignRatio":0.0041390933},{"code":"KR7101000008","symbolCode":"A101000","name":"KS인더스트리","change":"RISE","changeRate":0.0775862069,"tradePrice":1875.000,"changePrice":135.000,"accTradeVolume":1728460,"accTradePrice":3170508374.000,"marketCap":62712753750,"foreignRatio":0.0142981682}]}],"totalPages":16,"totalCount":78,"currentPage":1,"pageSize":5}
'''

temp = res.json()
temp
'''
{'code': 200,
 'message': 'OK',
 'data': [{'accTradeVolume': 1197570,
   'accTradePrice': 52238017347.0,
   'change': 'RISE',
   'sectorCode': 'G404020',
   'sectorName': '생명보험',
   'changeRate': 0.0578974884,
   'stockCount': 5,
   'includedStocks': [{'code': 'KR7032830002',
     'symbolCode': 'A032830',
     'name': '삼성생명',
     'change': 'RISE',
     'changeRate': 0.0685670262,
     'tradePrice': 138700.0,
     'changePrice': 8900.0,
     'accTradeVolume': 362439,
     'accTradePrice': 49013557000.0,
     'marketCap': 27740000000000,
     'foreignRatio': 0.219101865},
    {'code': 'KR7085620003',
     'symbolCode': 'A085620',
     'name': '미래에셋생명',
     'change': 'RISE',
     'changeRate': 0.0112359551,
     'tradePrice': 7200.0,
     'changePrice': 80.0,
     'accTradeVolume': 50253,
     'accTradePrice': 363754775.0,
     'marketCap': 1274516560800,
     'foreignRatio': 0.0120385769}]},
  {'accTradeVolume': 31919740,
   'accTradePrice': 17772990584.0,
   'change': 'RISE',
   'sectorCode': 'G151060',
   'sectorName': '종이와목재',
   'changeRate': 0.0467818863,
   'stockCount': 14,
   'includedStocks': [{'code': 'KR7078130002',
     'symbolCode': 'A078130',
     'name': '국일제지',
     'change': 'RISE',
     'changeRate': 0.1545064378,
     'tradePrice': 538.0,
     'changePrice': 72.0,
     'accTradeVolume': 31559888,
     'accTradePrice': 17038246223.0,
     'marketCap': 606544358598,
     'foreignRatio': 0.0029136384},
    {'code': 'KR7002820009',
     'symbolCode': 'A002820',
     'name': 'SUN&L',
     'change': 'RISE',
     'changeRate': 0.0184162063,
     'tradePrice': 2765.0,
     'changePrice': 50.0,
     'accTradeVolume': 4317,
     'accTradePrice': 11998280.0,
     'marketCap': 34861089585,
     'foreignRatio': 0.0078267835}]},
  {'accTradeVolume': 22024,
   'accTradePrice': 1707194150.0,
   'change': 'RISE',
   'sectorCode': 'G551030',
   'sectorName': '복합유틸리티',
   'changeRate': 0.0427807487,
   'stockCount': 1,
   'includedStocks': [{'code': 'KR7071320006',
     'symbolCode': 'A071320',
     'name': '지역난방공사',
     'change': 'RISE',
     'changeRate': 0.0427807487,
     'tradePrice': 78000.0,
     'changePrice': 3200.0,
     'accTradeVolume': 22024,
     'accTradePrice': 1707194150.0,
     'marketCap': 903142032000,
     'foreignRatio': 0.0478498359}]},
  {'accTradeVolume': 7340962,
   'accTradePrice': 399558557275.0,
   'change': 'RISE',
   'sectorCode': 'G551010',
   'sectorName': '전기유틸리티',
   'changeRate': 0.039175649,
   'stockCount': 5,
   'includedStocks': [{'code': 'KR7052690005',
     'symbolCode': 'A052690',
     'name': '한전기술',
     'change': 'RISE',
     'changeRate': 0.1425287356,
     'tradePrice': 99400.0,
     'changePrice': 12400.0,
     'accTradeVolume': 2123213,
     'accTradePrice': 210738703300.0,
     'marketCap': 3799068000000,
     'foreignRatio': 0.1074997645},
    {'code': 'KR7051600005',
     'symbolCode': 'A051600',
     'name': '한전KPS',
     'change': 'RISE',
     'changeRate': 0.0502564103,
     'tradePrice': 51200.0,
     'changePrice': 2450.0,
     'accTradeVolume': 408096,
     'accTradePrice': 20876683825.0,
     'marketCap': 2304000000000,
     'foreignRatio': 0.1199900667}]},
  {'accTradeVolume': 20073778,
   'accTradePrice': 797398015366.0,
   'change': 'RISE',
   'sectorCode': 'G201065',
   'sectorName': '조선',
   'changeRate': 0.0336567967,
   'stockCount': 30,
   'includedStocks': [{'code': 'KR7439260001',
     'symbolCode': 'A439260',
     'name': '대한조선',
     'change': 'RISE',
     'changeRate': 0.143030303,
     'tradePrice': 94300.0,
     'changePrice': 11800.0,
     'accTradeVolume': 2137716,
     'accTradePrice': 195635167650.0,
     'marketCap': 3633031221600,
     'foreignRatio': 0.0041390933},
    {'code': 'KR7101000008',
     'symbolCode': 'A101000',
     'name': 'KS인더스트리',
     'change': 'RISE',
     'changeRate': 0.0775862069,
     'tradePrice': 1875.0,
     'changePrice': 135.0,
     'accTradeVolume': 1728460,
     'accTradePrice': 3170508374.0,
     'marketCap': 62712753750,
     'foreignRatio': 0.0142981682}]}],
 'totalPages': 16,
 'totalCount': 78,
 'currentPage': 1,
 'pageSize': 5}
'''

내가 프로젝트 할 데이터 수집할 사이트 특징에 따라 방법 달라짐

  • 일반 사이트에서도 난도가 각양각색
  • 해보면서 해결책을 찾는 게 답이다
    • 난도가 높은 사이트는 전문 업체/툴을 사용해야하는 경우도 있음

'데이터분석 > Pandas' 카테고리의 다른 글

[Python] Pandas 11 _ pandas_m&a  (5) 2025.08.21
[Python] Pandas 10 _ csv  (0) 2025.08.21
[Python] Pandas 08 _ dart_site  (5) 2025.08.21
[Python] Pandas 07 _ json_kobis_api  (2) 2025.08.20
[Python] Pandas 06 _ kobis_api_xml  (0) 2025.08.20