먼저 전체 코드와 아웃풋 그림입니다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
import time
import datetime
import pandas as pd
import telegram #pip install python-telegram-bot
import requests
import pprint
import json
def Telegramchat(text):
telegram_token = '5106829469:AAGc-XqcK67mDADEuJERXFXgazI68dcO_x0'
telegram_chat_id = '5257112430'
bot = telegram.Bot(token = telegram_token)
# text = "김프알람"
url = 'https://api.telegram.org/bot'+telegram_token+'/sendMessage?chat_id='+telegram_chat_id+'&text='+text
return requests.get(url)
def word_preprocess(word):
symbols = [" ", '\n', "\t"] # make your own list
for symbol in symbols:
word = word.replace(symbol, '')
return word
def Data_Processing(text_data):
start_point = 0
data_2 = []
data_2_append = data_2.append
for i, v in enumerate(text_data):
try:
float(v)
except:
end_point = i
a = text_data[start_point:end_point] # 이 부분 어찌 깔끔하게..?
try: # 환전소 명이 숫자로 변하지 않을테니 숫자로 변하지 않는다면
int(a[0][:4])
except: # 환전소명(a)의 값이 4개 이상이면 data 2에 붙인다
if len(a) >= 2: # 2개 이상의 데이터는 있어야 정상적인 환전 데이터라서
# print(a)
data_2_append(a)
start_point = end_point
pass
return data_2
while True:
try: # 문제가 생겨 코드가 종료 될 경우 텔레그램으로 재실행을 위한 알람이 보내짐
while True:
now = datetime.datetime.now()
to_day = str(now.year) + "_" + str(now.month) + "_" + str(now.day)
if (now.weekday() != 6 or now.weekday() != 7) and (9 <= now.hour and now.hour <= 18):
pass
else:
time.sleep(3600)
# 이전 환전 데이터를 가져옮 (서버나 어떠한 문제로 재 실행 했을 경우 문제 없게 하기 위해서 오늘 멈췄으면 오늘 날짜로 데이터 계속 쓰게 함.)
# 즉 날짜가 변하면 새로운 날로 파일을 씀(csv 파일 최대한 안넘게 하기 위해)
data_File_name = "currency_exchange_data"+ "_" +to_day +".csv"
try: # 오늘 날짜와 같지 않은 데이터 명의 경우.. 새 파일을 만들어야함.
dic_data_dataFrame = pd.read_csv(data_File_name)
except:
try:
del dic_data_dataFrame
except:
pass
pass
html = urlopen("https://www.mibank.me/exchange/saving/index.php?currency=USD")
bsObject = BeautifulSoup(html, "html.parser")
# =============== 크롤링 부분
td_data = []
td_data_append = td_data.append
for data in bsObject.body.find_all('td'):
td_data_append(data.text)
text_data = []
for line in td_data:
# print(line)
word = word_preprocess(line)
if len(word) > 2: # ("]" in line) == False and
text_data.append(word)
# =============== 크롤링 부분
del text_data[0]
# ==== 데이터 전처리
data_2 = Data_Processing(text_data) # 데이터 저장하기 쉽게 가공. @ 이 부분 속도 빠르게 개선 가능해 보임
# ====csv 저장
dic_data = {}
dic_data["time"] = now.strftime('%Y-%m-%d %H:%M:%S')
for v in data_2:
dic_data[v[0]] = v[1]
new_dic_data_dataFrame = pd.DataFrame(dic_data, index=[0])
try: # concat 시도로 새로운 파일 만듦
dic_data_dataFrame = pd.concat([dic_data_dataFrame, new_dic_data_dataFrame], axis=0) # 수익 데이터 저장
except: # 같지 않은 파일을 만들 경우에
dic_data_dataFrame = new_dic_data_dataFrame
# 환전 데이터를 가지고 저장함.
data_File_name = "currency_exchange_data"+ "_" +to_day +".csv"
dic_data_dataFrame.to_csv(data_File_name, index=False, encoding="utf-8-sig")
time.sleep(2)
except Exception as e:
send_text = "환전소 크롤링 파일 종료 됨 원인 확인 할것."+str(e)
response = Telegramchat(send_text)
html = urlopen("https://www.mibank.me/exchange/saving/index.php?currency=USD")
bsObject = BeautifulSoup(html, "html.parser")
td_data = []
td_data_append = td_data.append
for data in bsObject.find_all('td'):
td_data_append(data.text)
7~8 번째 줄은 주소 불러오고 bs4로 html데이터 가져오는 부분입니다.
td_data = []
td_data_append = td_data.append
for data in bsObject.find_all('td'):
td_data_append(data.text)
10~13번째 줄은 <td> ~~data~~ </td> 의 내용들만 가져온것입니다.
def word_preprocess(word):
symbols = [" ", '\n', "\t"] # make your own list
for symbol in symbols:
word = word.replace(symbol, '')
return word
15~19번째는 띄어쓰기 된 값들과 엔터 빈칸 데이들은 없애는 function입니다.
text_data= []
for line in td_data:
# print(line)
word = word_preprocess(line)
if len(word)>2 : # ("]" in line) == False and
text_data.append(word)
del text_data[0]
21~26줄에서는 단어가 2개 이상인 값들만 가지고 와서 처리하는 모습이고요.
statuses = (text_data
)
if (len(statuses) != 0):
clear_output(wait=True)
display(statuses)
30~34번째 줄은 노트북 사용시 아웃풋을 한번만 보여주기 위해서 저렇게 구성하였습니다. 데이터를 저장하고 싶으면 여기서 text_data만 바꾸어주면 되겠습니다.
마지막 36번째 줄은 1초에 한번 갱신하게 만들기 위해 구성하였습니다.
'IT - 코딩 > 트레이딩 관련' 카테고리의 다른 글
옵션 전략을 위한 일봉 데이터 주봉으로 변환 _ for Option[파생상품 옵션](with python) (0) | 2023.06.23 |
---|---|
1배숏을 응용한 차익거래 프로그램(주요 이슈 및 해결 방안) (1) | 2023.02.28 |
통계적 차익거래를 위한 데이터 분석 및 머신러닝 활용방안 (0) | 2023.02.27 |
무위험 차익거래 자동매매 프로그램 2.주요 이슈와 해결 내용. (0) | 2023.02.26 |
무위험 차익거래 자동매매 프로그램 1.API허용 및 입출금 주소등록 (3) | 2023.02.26 |