FinanceDataReader icon indicating copy to clipboard operation
FinanceDataReader copied to clipboard

속도 제한 Cloudflare Rate Limiting

Open FinanceData opened this issue 3 years ago • 1 comments

no table found 에러, JSONDecodeError 에러

이 에러들은 응답이 HTTP 429 (too many requests) 인 경우 발생합니다.
FinanceDataReader 의 해외 종목의 가격 데이터는 주로 investing.com 에서 가져옵니다. investing.com 의 정책(시간과 반복회수 제한)을 정확히 알 수 는 없으나, 지정된 시간안에 반복된 요청을 하는 경우 발생합니다.

한번 발생하기 시작하면 24시간 동안 제한됩니다. (IP를 제한하는 것으로 보입니다)

속도 제한(Rate Limiting)에 대해서는 상세한 내용은 아래를 참고하세요.

해결책 (1)

(해결책은 아니지만) 단기적으로는 HTTP 429 error 에러의 경우 화면에 내용이 표시되도록 했습니다. 제한된 시간(재시도 시간)도 함께 표시 됩니다.

HTTP 429 error. Retry after 86388 seconds (23:58:48)

해결책(2)

다수의 연속적인 요청을 할 때 다음과 같이 지연을 주십시오. (실험결과 1.8초 이상의 지연이 필요합니다)

import FinanceDataReader as fdr
import time

for x in range(100):
    time.sleep(1.8)
    df = fdr.DataReader('AAPL', '2022')
    print('.', end='')

해결책(3)

데이터 소스 변경을 검토하고 있습니다. 해외 종목 가격의 경우 yahoo 혹은 naver 해외(모바일) 를 검토하고 있습니다. yahoo 혹은 naver 둘 다 investing.com 과 같은 Rate Limiting 은 없는 것으로 확인하였습니다.

반영에 2주 정도 소요 될 것으로 예상하고 있습니다.

FinanceData avatar Jun 21 '22 19:06 FinanceData

답답했었는데 상세한 원인 파악 감사드립니다.

데이터 소스 변경되길 기다리고 있겠습니다.

tyolee avatar Jun 21 '22 21:06 tyolee

2022-09-23 Release Note 0.9.40 에서 FIX 하였습니다

FinanceData avatar Sep 23 '22 12:09 FinanceData