티스토리 뷰
안녕하세요 정말 오랜만에 글을 쓰는 거 같습니다.
이런저런 일이 있으면서 글을 안 쓰다 보니 점점 더 게을러지는 거 같네요....😓😓
다시 정신 차리고 열심히 살아보겠습니다.
최근에 이탈리아로 여행을 가게 되었는데 유럽 환율이 어질어질하더라고요.... (저는 1,435원 정도에 환전을 했는데 이탈리아 여행 중에는 1,470원을 넘더라고요😮)
1원이라도 아끼고 싶은 마음이 생겨 환율 사이트를 찾고 시간 날 때마다 접속하여 유럽 환율을 체크하였는데
시간이 흐르니 유럽 환율을 확인하는 과정도 귀찮아지더라고요...
그래서 일정 시간이 되면 유럽 환율을 알려주는 프로그램을 만들어야겠다고 생각을 하게 되었습니다.
프로세스의 변화는 아래와 같습니다.
프로그램 개발 전 프로세스는 즐겨찾기나 인터넷만 종료하지 않으면 프로세스가 더 간단해질 수 있지만 의식하고 직접 찾는다는 거(수동)와 누군가가 알려주어 인지하느냐(자동)가 큰 차이점이라고 생각합니다.
프로그램에서 제일 중요한 포인트는 아래와 같습니다.(글쓴이 생각)
- 지속적으로 데이터 수집이 가능한 사이트 선정 및 데이터 수집
- 수집한 데이터를 사용자에게 알려 줄 수 있는 플랫폼
이제 본격적으로 크롤링을 진행해 보겠습니다.
사이트는 Investing로 선정하였습니다.
그 이유로는 실시간으로 변화하는 환율을 제공받아야 하는데, 그 포인트를 충족하는 사이트가 Investing이었고, 사이트 서치 시 제일 먼저 눈에 들어왔기 때문입니다.(다른 사이트를 찾았으면 그걸 했을 거예요.)
크롤링 사이트 주소는 https://kr.investing.com/currencies/eur-krw 입니다.
사이트 접속시 위와 같은 UI를 제공해 주는데 저는 빨간 박스에 있는 데이터만 수집 하겠습니다.
import requests
import time
from bs4 import BeautifulSoup
from datetime import datetime
import slack_sdk
ex_change = []
def exchange_rate_information(nation1, nation2):
ex_datetime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
headers = {
'User-Agent': 'Mozilla/5.0',
'Content-Type': 'text/html; charset=utf-8'
}
while True:
response = requests.get("https://kr.investing.com/currencies/{}-{}".format(nation1, nation2), headers=headers)
print(response)
content = BeautifulSoup(response.content, 'html.parser')
containers = content.find('span', {'data-test': 'instrument-price-last'})
datetime_now = str(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
ex_change.append(containers.text)
if len(ex_change) <=1 :
real_text = '현재시간 : {num}, 한국 돈 -> 유럽 돈 : {gen}'.format(num=datetime_now, gen=containers.text)
client.chat_postMessage(channel='#eur_info', text= real_text)
else :
c = round((float(ex_change[1].replace(',','')) - float(ex_change[0].replace(',',''))) / float(ex_change[0].replace(',','')) * 100,2)
real_text = '현재시간 : {num}, 한국 돈 -> 유럽 돈 : {gen}, 증가율 : {rate}'.format(num=datetime_now
,gen=containers.text
,rate = c)
client.chat_postMessage(channel='#eur_info', text= real_text)
del ex_change[0]
time.sleep(600)
if __name__ == '__main__':
try:
slack_token = 'Slack 토큰 입력'
client = slack_sdk.WebClient(token=slack_token)
exchange_rate_information('eur', 'krw')
라이브러리는 requests, BeautifulSoup을 활용하였고, 크롤링 알고리즘을 함수화 시켜 10분이 될 때마다 원하는 환율을 받을 수 있게 구성해 보았습니다.
ex_change 리스트에서 환율 데이터를 받고 리스트 수가 1개 일 때는 환율 만 전달하지만 2개 이상 일 때는 증가율을 같이 보여주게 만들었습니다.
그리고 지속적으로 과거 데이터를 삭제 되게 구축하였습니다.
코드는 문제없이 잘 돌아갔고 이제 지속적으로 받는 데이터를 사용자에게 알려주는 플랫폼을 선정하겠습니다.
과거에 Slack이라는 업무 협업 툴 api를 활용하여 챗봇을 만든 경험이 있어 Slack을 활용해 보겠습니다.
슬랙 api 할당받는 방법을 따로 올리거나 혹은 다른 분들이 올린 거 보시고 따라 하시면 될 거 같습니다.
slack 에서 받은 api를 slack_token 변수에 입력하여 저장하여 활용 하였습니다.
최종적으로 slack 에서 잘 작동 되는지 보겠습니다.
MSG_Bot이 열심히 10분마다 유럽 환율과 증가율을 알려주는 걸 볼 수 있습니다.
이 기능을 중심으로 airflow나 다른 라이브러리를 활용하여 스케줄링을 걸 수도 있고, UI를 이쁘게 꾸며서 활용할 수 있다고 생각합니다.
이 프로그램 덕분에 저는 환율을 실시간으로 확인할 수 있었고 만족하는 가적에 구매를 할 수 있었습니다.
다음에도 다른 재미있는 일로 뵙겠습니다~👍
그리고 글이 문제 될 시 삭제하겠습니다.
'데이터수집하러왔어요' 카테고리의 다른 글
Python으로 메이플 OPEN API 활용해 볼래? - 1(무릉도장 랭킹 + ocid 데이터 수집) (0) | 2024.04.23 |
---|
- Total
- Today
- Yesterday
- 음식
- 포지션매트릭스
- 무릉도장
- 음식 배달
- 라스트마일분석
- 음식배달
- 메이플API
- maplestory
- 데이터분석
- 라스트마일
- 배달
- 라스트마일 분석
- 데이터
- 메이플
- Investing
- 크롤링
- 환율
- 코호트분석
- NEXONAPI
- Lastmile
- Requests
- Crawling
- OpenAPI
- 비즈니스분석
- 비즈니스 분석
- 비즈니스 데이터분석
- BeautifulSoup
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |