FinanceDataReader
FinanceDataReader copied to clipboard
속도 제한 Cloudflare Rate Limiting
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주 정도 소요 될 것으로 예상하고 있습니다.
답답했었는데 상세한 원인 파악 감사드립니다.
데이터 소스 변경되길 기다리고 있겠습니다.
2022-09-23 Release Note 0.9.40 에서 FIX 하였습니다