|
import os |
|
import requests |
|
from bs4 import BeautifulSoup |
|
import pandas as pd |
|
import re |
|
import gradio as gr |
|
from openpyxl import load_workbook |
|
from openpyxl.styles import Font |
|
|
|
|
|
url = "https://finance.naver.com/sise/sise_rise.naver?sosok=1" |
|
|
|
|
|
def scrape_naver_finance(): |
|
|
|
response = requests.get(url) |
|
response.encoding = 'euc-kr' |
|
html = response.text |
|
|
|
|
|
soup = BeautifulSoup(html, 'html.parser') |
|
|
|
|
|
table = soup.find("table", {"class": "type_2"}) |
|
|
|
|
|
data = [] |
|
|
|
|
|
rows = table.find_all("tr")[2:] |
|
|
|
for row in rows: |
|
columns = row.find_all("td") |
|
if len(columns) > 1: |
|
rank = columns[0].text.strip() |
|
name = columns[1].text.strip() |
|
price = columns[2].text.strip() |
|
change = columns[3].text.strip() |
|
rate = columns[4].text.strip() |
|
volume = columns[5].text.strip() |
|
|
|
|
|
change_cleaned = re.sub(r'[^\d-]', '', change).strip() |
|
rate_cleaned = re.sub(r'[^\d.-]', '', rate).strip() |
|
|
|
|
|
data.append([rank, name, price, change_cleaned, rate_cleaned, volume]) |
|
|
|
|
|
df = pd.DataFrame(data, columns=["์์", "์ข
๋ชฉ๋ช
", "ํ์ฌ๊ฐ", "์ ์ผ๋น", "๋ฑ๋ฝ๋ฅ ", "๊ฑฐ๋๋"]) |
|
|
|
|
|
save_dir = "/mnt/data" |
|
if not os.path.exists(save_dir): |
|
os.makedirs(save_dir) |
|
|
|
|
|
save_path = os.path.join(save_dir, "naver_top_stocks.xlsx") |
|
df.to_excel(save_path, index=False) |
|
|
|
|
|
workbook = load_workbook(save_path) |
|
sheet = workbook.active |
|
red_font = Font(color="FF0000") |
|
|
|
for row in range(2, sheet.max_row + 1): |
|
rate_value = sheet.cell(row=row, column=5).value |
|
if rate_value and float(rate_value) >= 20.0: |
|
sheet.cell(row=row, column=2).font = red_font |
|
|
|
workbook.save(save_path) |
|
|
|
return df, save_path |
|
|
|
|
|
def get_top_stocks(): |
|
df, file_path = scrape_naver_finance() |
|
return df, file_path |
|
|
|
|
|
iface = gr.Interface(fn=get_top_stocks, inputs=None, outputs=["dataframe", "file"], title="๋ค์ด๋ฒ ์ฆ๊ถ ์์น TOP ์ข
๋ชฉ") |
|
iface.launch() |
|
|