PROJECT 07_환율 변환기

김리나·2023년 1월 28일
0

환율 정보를 받아 환율을 변환하는 프로그램

  • 지원되는 통화목록 출력

#main7-1
from currency_converter import CurrencyConverter

cc = CurrencyConverter()
print(cc.currencies)
  • 1달러 원화로 변환한 결과

#main7-2
from currency_converter import CurrencyConverter

cc = CurrencyConverter('http://www.ecb.europa.eu/stats/eurofxref/eurofxref.zip')
print(cc.convert(1, 'USD', 'KRW'))
  • 실시간 환율 정보 크롤링 코드

#main7-3
import requests
from bs4 import BeautifulSoup # 사이트 정보 크롤링 

def get_exchange_rate(target1, target2):
    # 헤더를 통해 일반적인 브라우저를 이용하여 접속한 것처럼 보이게 한다 
    # (헤더 없이 접속하면 로봇으로 간주하여 사이트에서 정보를 주지않음) 
    headers = {
        'User-Agent': 'Mozilla/5.0',
        'Content-Type': 'text/html; charset=utf-8'
    } 
    
    #request 라이브러리를 이용하여 사이트에 접속하여 응답값 가져오기
    response = requests.get("http://kr.investing.com/currencies/{}-{}".format(target1, target2), headers=headers)

    #html로 가져오기
    content = BeautifulSoup(response.content, 'html.parser')
    
    containers = content.find('span', {'data-test': 'instrument-price-last'})
    print(containers.text)


get_exchange_rate('usd', 'krw')

오류 발생

AttributeError: 'NoneType' object has no attribute 'text'

  • 이유를 찾아보니 변수 containers에서 정의된 속성을 찾을 수 없어 None을 return 하였고 None.text를 print하라고 하니까 오류가 발생한 것이다

  • F12로 개발자 탭을 열어서 우리가 필요한 정보가 뭔지 확인해보았다

  • 기존 코드 find('span', {'data-test': 'instrument-price-last'})랑 같으므로 이 부분은 잘못된게 없어보인다

find_all 함수 이용

  • 일단 내가 찾는 정보가 content에 있는지 find_all 함수를 이용해서 'span'태그를 모두 찾아보았다.

    print(content.find_all('span'))

[<span data-translate="unable_to_access">You are unable to access</span>, <span class="cf-no-screenshot error"></span>, <span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">796590a5ddcded91</strong></span>, <span class="cf-footer-separator sm:hidden"></span>, <span class="cf-footer-item hidden sm:block sm:mb-1" id="cf-footer-item-ip">
      Your IP:
      <button class="cf-footer-ip-reveal-btn" id="cf-footer-ip-reveal" type="button">Click to reveal</button>
<span class="hidden" id="cf-footer-ip">121.131.143.79</span>
<span class="cf-footer-separator sm:hidden"></span>
</span>, <span class="hidden" id="cf-footer-ip">121.131.143.79</span>, <span class="cf-footer-separator sm:hidden"></span>, <span class="cf-footer-item sm:block sm:mb-1"><span>Performance &amp; security by</span> <a href="https://www.cloudflare.com/5xx-error-landing" id="brand_link" rel="noopener noreferrer" target="_blank">Cloudflare</a></span>, <span>Performance &amp; security by</span>]
  • 내가 찾는 span class="text-2xl" data-test="instrument-price-last" 가 content에 없는 것으로 확인되었다.

Box 지정해서 크롤링하기

0개의 댓글