Spaces:
Sleeping
Sleeping
File size: 2,541 Bytes
c3fa335 a5326d4 c3fa335 a5326d4 c3fa335 a5326d4 c3fa335 |
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 |
import requests
from bs4 import BeautifulSoup
import pandas as pd
import gradio as gr
# 스크래핑 함수
def scrape_naver_stock():
url = "https://finance.naver.com/sise/sise_rise.naver?sosok=1"
response = requests.get(url)
response.encoding = 'euc-kr'
# BeautifulSoup으로 HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')
table = soup.find('table', class_='type_2')
# 테이블에서 데이터 추출
rows = table.find_all('tr')
data = []
for row in rows:
cols = row.find_all('td')
if len(cols) > 1:
rank = cols[0].text.strip()
name = cols[1].text.strip()
price = cols[2].text.strip()
# 전일비에서 상한가, 상승 등의 텍스트를 제거하고 숫자만 추출
diff = cols[3].text.strip().replace("상한가", "▲").replace("상승", "▲")
change_rate = cols[4].text.strip()
volume = cols[5].text.strip()
buy_price = cols[6].text.strip()
sell_price = cols[7].text.strip()
buy_volume = cols[8].text.strip()
sell_volume = cols[9].text.strip()
per = cols[10].text.strip()
roe = cols[11].text.strip()
data.append([rank, name, price, diff, change_rate, volume, buy_price, sell_price, buy_volume, sell_volume, per, roe])
# Pandas DataFrame으로 변환
df = pd.DataFrame(data, columns=['순위', '종목명', '현재가', '전일비', '등락률', '거래량', '매수호가', '매도호가', '매수총잔량', '매도총잔량', 'PER', 'ROE'])
return df
# 엑셀 파일 저장 함수
def save_to_excel():
df = scrape_naver_stock()
file_path = "/mnt/data/naver_stock_data.xlsx" # Gradio에서 사용할 수 있는 파일 경로
df.to_excel(file_path, index=False)
return file_path
# 그라디오 UI
def display_stocks():
df = scrape_naver_stock()
return df
# 그라디오 인터페이스
with gr.Blocks() as iface:
# 스크래핑된 데이터 테이블 출력
stock_table = gr.DataFrame(label="상승 TOP 종목")
download_button = gr.Button("엑셀 파일 다운로드")
# 버튼 클릭 시 엑셀 파일 저장 및 다운로드 제공
download_output = gr.File()
# 버튼 클릭 시 데이터 업데이트
download_button.click(save_to_excel, outputs=download_output)
# 스크래핑된 데이터를 UI에 로드
iface.load(fn=display_stocks, inputs=[], outputs=stock_table)
iface.launch()
|