본문 바로가기
개발일지/Python

*매우매우중요 Python - 정규표현식 활용으로 환율정보 가져오기 (미친듯이 중요)

by 다니엘의 개발 이야기 2022. 9. 23.
320x100
# 매우매우 중요 * 정규표현식
# 파트4 - 챕터 2-12

from xml.dom.xmlbuilder import DocumentLS
import requests as req
import re

url = 'https://finance.naver.com/marketindex/'
res = req.get(url)
body = res.text

# match
# search
# findall
# 이 3가지 모두 사용 가능

# 정규표현식을 준비시킨다.
# .*?의 의미는 아무 문자나 / 0개이상 가져와 / 그 중에서 가장 좁은 범위를 가져와
# r = re.compile(r"미국 USD.*?value\">(.*?)</", re.DOTALL)
# ['1,409.50']
# 싱글코테이션으로 설정했을땐 작동이 안되었다. 주의하자.

# r = re.compile(r"blind\">(.*?)</span>.*?value\">(.*?)</", re.DOTALL)
# [('미국 USD', '1,409.50'), ('원', '992.50'), ('원', '1,385.68'), ('원', '198.57'), ('원', '142.0800'), ('엔', '0.9815'), ('달러', '1.1263'), ('달러', '111.1000'), ('상승', '83.49'), ('달러', '1722.61'), ('원', '1681.1'), ('달러', '75716.22')]

r = re.compile(r"h_lst.*?blind\">(.*?)</span>.*?value\">(.*?)</", re.DOTALL)
# [('미국 USD', '1,409.70'), ('일본 JPY(100엔)', '992.78'), ('유럽연합 EUR', '1,385.74'), ('중국 CNY', '198.58'), ('달러/일본 엔', '142.0800'), ('유로/달러', '0.9815'), ('영국 파운드/달러', '1.1263'), ('달러인덱스', '111.1000'), ('WTI', '83.49'), ('휘발유', '1722.61'), ('국제 금', '1681.1'), ('국내 금', '75716.22')]

captures = r.findall(body)

print(captures)
# []

print('---------')
print('환율 계산기')
print('---------')
print('')

for c in captures:
    print(c[0] + " : " + c[1])

print()

usd = float(captures[0][1].replace(',',''))
won = input("달러로 바꾸길 원하는 금액(원)을 입력해주세요.: ")
won = int(won)
dollor = won / usd
dollor = int(dollor)
print(f'{dollor}달러 환전되었습니다.')

 

출력 결과물

 

미국 USD : 1,409.10
일본 JPY(100엔) : 992.08
유럽연합 EUR : 1,384.72
중국 CNY : 198.44
달러/일본 엔 : 142.0800
유로/달러 : 0.9815
영국 파운드/달러 : 1.1263
달러인덱스 : 111.1000
WTI : 83.49
휘발유 : 1722.61
국제 금 : 1681.1
국내 금 : 75677.06

달러로 바꾸길 원하는 금액(원)을 입력해주세요.: 100000
70달러 환전되었습니다.

 

정말 매우 중요하다.

완전한 디테일적인 설명이 모자라서 공부가 더 필요하지만

그냥 미쳤다. 이건 꼭 짚고 넘어가야 하는 부분이다.

정규표현식의 힘이 정말 강력하다.

300x250