์ถ์ฒ : ๋ค์ด๋ฒ ์ฆ๊ถ : ์ฝ์คํผ200
import bs4
import requests
# ํด๋น ํ๋ ์์ url์ ๋ณต์ฌํ์ฌ page_url์ ์ ์ฅํ๊ณ f-string์ ํ์ฉํด page_no์ formatํ๋ค.
page_no = 1
page_url = f"https://finance.naver.com/sise/sise_index_day.naver?code=KPI200&page={page_no}"
# ํด๋น url์์ response๋ฅผ ๋ฐ์ ๊ทธ๊ฒ์ text๋ก ๋ณํํ๊ณ source์ ์ ์ฅํ ๋ค
source = requests.get(page_url).text
# bs4 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํด ๋ณด๊ธฐ ์ฝ๊ฒ source๋ฅผ ๋ณํํ๋ค.
source = bs4.BeautifulSoup(source)
# ๋ ์ง ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ td class๋ฅผ ์ฐพ์์ ๋ ์ง ๋ฐ์ดํฐ๋ง ์ถ์ถํ์ฌ data_list์ ์ ์ฅํ๋ค.
dates = source.find_all('td', class_="date")
date_list = []
for date in dates:
date_list.append(date.text)
# ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฒด๊ฒฐ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ td class๋ฅผ ์ฐพ์์ ์ฒด๊ฒฐ๊ฐ ๋ฐ์ดํฐ๋ง ์ถ์ถํ์ฌ price_list์ ์ ์ฅํ๋ค.
prices = source.find_all('td', class_="number_1")
price_list = []
# ์ ์ผ๋น/๋ฑ๋ฝ๋ฅ /๊ฑฐ๋๋/๊ฑฐ๋๋๊ธ ๋ค๋ ๊ฐ์ ํ๊ทธ๋ฅผ ๊ณต์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ slicing์ ์ด์ฉํ์ฌ ์ฒด๊ฒฐ๊ฐ ๋ฐ์ดํฐ๋ง ํ์ํ๋๋ก ํ๋ค.
for price in prices[::4]:
price_list.append(price.text)
price_list
<td class="pgRR">
<a href="/sise/sise_index_day.naver?code=KPI200&page=719">๋งจ๋ค
<img src="https://ssl.pstatic.net/static/n/cmn/bu_pgarRR.gif" width="8" height="5" alt="" border="0">
</a>
</td>
# td tag์ค์ class๊ฐ pgRR์ธ ํ๊ทธ๋ฅผ ์ฐพ์์, ๊ทธ ํ์์ ์๋ a tag์ href ์์ฑ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
last_url = source.find_all("td", class_="pgRR")[0].find_all("a")[0]["href"]
#'/sise/sise_index_day.naver?code=KPI200&page=719' ์์ ๋ง์ง๋ง 3๊ธ์๋ฅผ ๋์ด๋ด๋ฉด ์ํ๋ ๋ง์ง๋ง ํ์ด์ง ์ซ์๋ฅผ ์ถ์ถํ ์ ์๋ค.
last_page = int(last_url.split('&page=')[-1])
import requests
import bs4
import pandas as pd
# ๋ชจ๋ ๋ณ์ ์ด๊ธฐํ
date_list = []
price_list = []
page_no = 1
page_url = f"https://finance.naver.com/sise/sise_index_day.naver?code=KPI200&page={page_no}"
source = requests.get(page_url).text #
source = bs4.BeautifulSoup(source)
source.prettify()
# ๋ง์ง๋ง ํ์ด์ง ๋ฒํธ ์ฐพ๊ธฐ
last_url = source.find_all('td', class_="pgRR")[0].find_all('a')[0]['href']
last_page = int(last_url.split('&page=')[-1])
# for๋ฌธ์ ์ด์ฉํ์ฌ ์ฒซ ๋ฒ์งธ ํ์ด์ง๋ถํฐ ๋ง์ง๋ง ํ์ด์ง๊น์ง์ ๋ชจ๋ ๋ ์ง ๋ฐ์ดํฐ์ ์ฒด๊ฒฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค.
for page_no in range(1, last_page + 1) :
page_url = f"https://finance.naver.com/sise/sise_index_day.naver?code=KPI200&page={page_no}"
source = requests.get(page_url).text
source = bs4.BeautifulSoup(source)
dates = source.find_all('td', class_="date") # ๋ ์ง ๋ฐ์ดํฐ ์ถ์ถ
for date in dates :
date_list.append(date.text)
prices = source.find_all('td', class_="number_1") # ์ฒด๊ฒฐ๊ฐ ๋ฐ์ดํฐ ์ถ์ถ
for price in prices[::4] :
price_list.append(price.text)
# ์ถ์ถ๋ ๋ฐ์ดํฐ๋ฅผ Dataframe ํํ๋ก ์ ์ฅํ๊ณ ๊ฒฐ์ธก์น๋ ์ ๊ฑฐํ๋ค.
df_kosdaq = pd.DataFrame({"date" : date_list,
"price" : price_list}).dropna()
# Dataframe์ ์์
ํ์ผ๋ก ์ ์ฅํ๋ค.
df_kosdaq.to_excel("kpi200.xlsx", index = False)