규도자 개발 블로그

Investing.com에서 파이썬으로 실시간 환율 긁어오기 본문

Finance/With Python

Investing.com에서 파이썬으로 실시간 환율 긁어오기

규도자 (gyudoza) 2021. 4. 13. 19:41
반응형

Investing.com에서 실시간 환율 긁어오기

환율을 사용할 일이 생겨서 만들게 됐다. 원래 보통 이렇게 실시간 업데이트가 되는 페이지는 js를 이용해서 비동기갱신하기 마련인데 그래서 오랜만에 selenium과 phantomJS까지 셋팅을 했는데... 혹시나 해서 환율 조회 페이지에 가서 js를 끄고 새로고침해봤는데 가격이 그대로 오더라. 최초 요청시에는 현재 시세를 보여주고 실시간으로 element를 비동기 갱신하는 방식으로 제작된 것 같다. 덕분에 24시간 실시간 시세를 얻을 수 있게 됐다.

 원래 만들기 전에 꼭 누가 만든 걸 찾아보곤 하는데 만들어진 예제가 전부 네이버 증권에서 파싱해서 가져오는 거였고, 그건 안타깝게도 업데이트가 느리다. 지금 글을 쓰는 현재(2021-04-13 19:29) 네이버 증권에서 고시하고 있는 환율의 업데이트 시기는 약 1시간 전인 18시 36분의 것이다. 인베스팅닷컴의 것도 hts나 기타 응용프로그램에서 얻을 수 있는 수치보다는 느리지만, 심지어는 html을 전부 긁어오고 파싱하는 과정에서 더 느리지만 1시간 전의 자료로 계산하는 것보다는 나을 것이다.

코드는 아래와 같다. 아, 먼저 두 개의 패키지를 설치해야 한다.

pip install beautifulsoup4 requests

그리고 아래의 코드를 실행한다.

import requests
from bs4 import BeautifulSoup
from datetime import datetime

latencies = []


def get_currency_exchange_rate(pair1, pair2):
    print("-----currency pair-----")
    print(pair1, 'and', pair2)
    print("-----------------------")
    ex_datetime = datetime.now()
    headers = {
        'User-Agent': 'Mozilla/5.0',
        'Content-Type': 'text/html; charset=utf-8'
    }
    while True:
        response = requests.get("https://kr.investing.com/currencies/{}-{}".format(pair1, pair2), headers=headers)
        content = BeautifulSoup(response.content, 'html.parser')
        containers = content.find('span', {'id': 'last_last'})
        latencies.append(datetime.now().timestamp() - ex_datetime.timestamp())
        print(datetime.now(), containers.text)
        ex_datetime = datetime.now()


if __name__ == '__main__':
    try:
        get_currency_exchange_rate('usd', 'krw')
    except KeyboardInterrupt:
        print('stop')
        print('latencies mean is:', sum(latencies) / len(latencies))

실제 필요한 건 response부터 print부분까지이다. 실행하면 다음과 같이 출력된다.

-----currency pair-----
usd and krw
-----------------------
2021-04-13 19:32:35.602340 1,124.10
2021-04-13 19:32:37.460475 1,124.11
2021-04-13 19:32:38.727059 1,124.12
2021-04-13 19:32:39.917007 1,124.11
2021-04-13 19:32:41.554177 1,124.12
2021-04-13 19:32:42.781922 1,124.22
stop
latencies mean is: 1.403686801592509

함수를 멈추면 latency가 표시되게 했다. 평균 이정도의 latency를 보이므로 퀀트 프로그램을 만들 때 환율이 필요하다면 그때 계산해서 가져오지 말고 한 2초정도의 interval을 둔 지속적인 요청을 통해 메모리상에서 환율을 갱신하는 상태에서 그 환율을 갖고 계산하는 게 퀀트 프로그램의 계산에 훨씬 도움이 될 것이다. (현재 내가 사용하고 있는 방법이기도 하다)

 그리고 필요한 currency exchange pair가 있을 땐 위 함수에서 들어갈 변수를 바꿔서 사용하도록 하자. 물론 인베스팅닷컴에 의존적이므로 인베스팅닷컴에서 제공하는 화폐단위만 확인할 수 있으며... 오래 켜놨을 때 ip블락이 당한다던지 하는 확인은 해본 적이 없으니 사용할 때 주의하도록 하자.

 

반응형
0 Comments
댓글쓰기 폼