작성
·
22
0
코드를 그대로 따라서 작성하고 실행해보았는데 아무런 반환값이 나오지 않습니다. 구글과 네이버의 페이지 구조가 그동안 (처음 강의 올리신 후) 바뀌어서 그런걸까요?
답변 2
0
일단 확인해본 바로 네이버 같은 경우는 아직까지 동작에 문제는 없습니다만, 구글은 현재 대부분의 프로그래밍적인 접근을 차단하고 있습니다. 실제 구조를 분석해보면 크게 달라진건 없지만 프로그래밍 적인 접근 자체를 차단하고 있어 보입니다. 조만간 구글 검색 자체가 AI 기능을 탑재해서 대대적으로 변화하고 있는 시점이라 많은 변화가 예정되어있어 그런듯 보입니다.
import requests
import json
def get_exchange_rate_simple(from_currency="USD", to_currency="KRW", amount=1):
"""가장 간단하고 확실한 환율 API - 회원가입 불필요"""
apis = [
# API 1: exchangerate-api.com (무료, 월 1500회)
{
"url": f"https://api.exchangerate-api.com/v4/latest/{from_currency}",
"parser": lambda data: data['rates'].get(to_currency, 0)
},
# API 2: freeforexapi.com (무료, 제한 없음)
{
"url": f"https://api.freeforexapi.com/api/live?pairs={from_currency}{to_currency}",
"parser": lambda data: data['rates'].get(f"{from_currency}{to_currency}", {}).get('rate', 0)
},
# API 3: currencyapi.net (무료, 월 300회)
{
"url": f"https://api.currencyapi.com/v3/latest?apikey=fca_live_YOUR_API_KEY¤cies={to_currency}&base_currency={from_currency}",
"parser": lambda data: data['data'].get(to_currency, {}).get('value', 0)
}
]
for i, api in enumerate(apis, 1):
try:
print(f"API {i} 시도 중...")
# API 키가 필요한 경우 스킵
if "YOUR_API_KEY" in api["url"]:
continue
response = requests.get(api["url"], timeout=10)
response.raise_for_status()
data = response.json()
rate = api["parser"](data)
if rate > 0:
converted_amount = amount * rate
print(f"✅ API {i} 성공!")
return {
'success': True,
'rate': rate,
'amount': amount,
'converted_amount': round(converted_amount, 2),
'from': from_currency,
'to': to_currency
}
except Exception as e:
print(f"❌ API {i} 실패: {e}")
continue
return {'success': False, 'error': '모든 API 실패'}
def google_money_exchange_rate_replacement(search, to="원"):
"""기존 함수를 완전히 대체하는 새 함수"""
# 통화 코드 변환
currency_map = {
"원": "KRW",
"달러": "USD",
"엔": "JPY",
"유로": "EUR",
"파운드": "GBP"
}
to_currency = currency_map.get(to, to)
# search에서 금액과 통화 추출
amount = 1
from_currency = "USD"
try:
parts = search.upper().split()
for part in parts:
# 숫자 찾기
if part.replace('.', '').replace(',', '').isdigit():
amount = float(part.replace(',', ''))
# 통화 코드 찾기
elif part in ['USD', 'EUR', 'JPY', 'GBP', 'CNY', 'CAD', 'AUD']:
from_currency = part
except:
pass
# API로 환율 조회
result = get_exchange_rate_simple(from_currency, to_currency, amount)
if result['success']:
return (
str(result['converted_amount']),
result['from'],
result['to']
)
else:
return (0, None, None)
# 실시간 여러 통화 조회
def get_multiple_rates():
"""주요 통화들의 원화 환율 한번에 조회"""
currencies = ['USD', 'EUR', 'JPY', 'GBP', 'CNY']
results = {}
for currency in currencies:
result = get_exchange_rate_simple(currency, 'KRW')
if result['success']:
results[currency] = result['rate']
else:
results[currency] = 'N/A'
return results
# 사용 예시
if __name__ == "__main__":
print("=== 기존 함수 대체 테스트 ===")
result = google_money_exchange_rate_replacement("1 USD", "원")
print(f"1 USD → 원: {result}")
result = google_money_exchange_rate_replacement("100 EUR", "원")
print(f"100 EUR → 원: {result}")
print("\n=== 주요 통화 환율 ===")
rates = get_multiple_rates()
for currency, rate in rates.items():
print(f"1 {currency} = {rate} KRW")
클로드 소넷4가 작성해준 코드이며 테스트 했을때 문제없이 동작함을 확인했습니다.
0
안녕하세요, 인프런 AI 인턴입니다. minimings님.
코드를 올바르게 입력했는데 결과가 나오지 않을 경우 가장 흔한 원인은 웹사이트의 구조 변경이나 코드의 오타 또는 설정 문제일 수 있습니다. 해당 문제는 웹 크롤링 관련 강의에서도 자주 발생하는 문제입니다. 웹사이트 구조가 변경될 경우, 기존 코드는 제대로 작동하지 않을 수 있으므로, 아래와 같은 사항들을 점검해보세요.
웹사이트 구조 확인: 구글이나 네이버는 검색 결과 페이지의 HTML 구조를 주기적으로 변경합니다. 이 경우, 브라우저의 개발자 도구(F12)를 열어서 현재 HTML 구조를 확인하시고, 코드에서 선택자(selector)를 수정해야 할 수도 있습니다.
HTTP 요청 헤더 설정 확인: 잘못된 헤더 설정이 있을 경우 웹사이트에서 요청을 차단할 수 있습니다. User-Agent와 같은 헤더가 올바르게 설정되어 있는지 체크해보세요.
오류 발생 시 디버깅: 코드에 오류가 있는 경우 파이썬에서 제공하는 로그나 예외 메세지를 통해 문제의 원인을 찾아보세요. 에러 메세지를 출력하는 것이 도움이 될 수 있습니다.
코드의 정확한 실행 환경: 예를 들어, Python 버전이나 사용 중인 라이브러리(BeautifulSoup, requests 등)의 버전도 문제가 될 수 있습니다. 강의에서 사용한 것과 동일한 환경인지 확인해보세요.
콘텐츠 차단: 일부 웹사이트는 봇 또는 크롤러의 접근을 막을 수 있는 로봇 차단 시스템을 사용합니다. 이 경우 다른 방법으로 접근을 시도해야 할 수도 있습니다.
관련된 기존 질문 및 답변에서 필요한 부분을 확인해보세요:
- 네이버 블로그 크롤링 질문드립니다.에서는 개발자 도구를 통한 서버 응답 확인 방법에 대해 다루고 있습니다.
- 크롤링 html 구조? 질문 있습니다.에서는 웹사이트 크롤링 시 HTML 구조 파악과 선택자 사용 방법에 대해 설명하고 있습니다.
위의 정보들을 바탕으로 코드와 웹사이트 간의 불일치를 조정해 보시기를 권장드립니다. 계속 문제가 발생하면 더 구체적인 코드를 공유해 주시면 자세히 도와드릴 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.