Spaces:
Sleeping
Sleeping
File size: 3,131 Bytes
5cb8bcc 7ae63a6 5cb8bcc 7ae63a6 5cb8bcc 7ae63a6 5cb8bcc 7ae63a6 de729b3 5cb8bcc de729b3 5cb8bcc 7ae63a6 5cb8bcc 7ae63a6 5cb8bcc 7ae63a6 de729b3 7ae63a6 de729b3 5cb8bcc 7ae63a6 299ea3e 5cb8bcc 7ae63a6 5cb8bcc 7ae63a6 5cb8bcc 7ae63a6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
import requests
from bs4 import BeautifulSoup
import pandas as pd
import gradio as gr
def fetch_kosdaq_data():
# 네이버 증권 코스닥 URL
url = "https://finance.naver.com/sise/sise_rise.naver?sosok=1"
try:
# 웹 페이지 요청
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.content, "html.parser")
# 테이블 데이터 추출
table = soup.find("table", class_="type_2")
rows = table.find_all("tr")
data = []
for row in rows:
columns = row.find_all("td")
if len(columns) >= 12: # 12개 열이 있는 행만 처리
try:
# 데이터 파싱
rank = columns[0].get_text(strip=True)
name = columns[1].get_text(strip=True)
current_price = columns[2].get_text(strip=True)
diff = columns[3].get_text(strip=True)
change_rate = columns[4].get_text(strip=True)
volume = columns[5].get_text(strip=True)
buy_price = columns[6].get_text(strip=True)
sell_price = columns[7].get_text(strip=True)
buy_total = columns[8].get_text(strip=True)
sell_total = columns[9].get_text(strip=True)
per = columns[10].get_text(strip=True)
roe = columns[11].get_text(strip=True)
data.append([
rank, name, current_price, diff, change_rate,
volume, buy_price, sell_price, buy_total,
sell_total, per, roe
])
except Exception as e:
print(f"Error parsing row: {e}")
continue
# DataFrame 생성
columns = ["Rank", "Name", "Current Price", "Difference", "Change Rate",
"Volume", "Buy Price", "Sell Price", "Buy Total",
"Sell Total", "PER", "ROE"]
df = pd.DataFrame(data, columns=columns)
return df
except Exception as e:
print(f"Error occurred: {e}")
return None
def display_data():
df = fetch_kosdaq_data()
if df is not None and not df.empty:
return df
else:
return "Failed to fetch data or no data available. Please check the logs."
# Gradio 인터페이스 설정
def gradio_interface():
with gr.Blocks() as demo:
gr.Markdown("# 네이버 증권 코스닥 데이터 스크래핑")
fetch_button = gr.Button("데이터 가져오기")
output_table = gr.Dataframe(headers=["Rank", "Name", "Current Price", "Difference", "Change Rate",
"Volume", "Buy Price", "Sell Price", "Buy Total",
"Sell Total", "PER", "ROE"]) # 명시적 열 이름 지정
fetch_button.click(fn=fetch_kosdaq_data, inputs=[], outputs=output_table)
return demo
demo = gradio_interface()
if __name__ == "__main__":
demo.launch()
|