0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pandasでread_jsonするときにキャッシュでアクセスする方法

Posted at

目的

read_jsonでwebリソースからDataFrameを作成するときに毎回通信を発生させない

背景

web apiを使って情報を取得して色々したいが、リクエスト数に制限があり、毎回アクセスしていては、すぐに上限に引っかかってしまう。
テストコードを書いているときはリアルタイムな情報は必要ないので、ローカルにキャッシュで持っておきたい。

ライブラリ

  1. pandas
  2. requests
  3. requests_cache
  4. StringIO

サンプルコード

import pandas as pd
import requests
import requests_cache
from io import StringIO

requests_cache.install_cache()
response = requests.get("https://financialmodelingprep.com/api/v3/income-statement/AAPL?apikey=demo")
content = response.content.decode()
df = pd.read_json(StringIO(content))

解説

requests_cache

request.getで取得するときにキャッシュが存在する場合は通信を行わず、キャッシュからresponseを返す。
requests_cache.install_cache("test")でキャッシュ名を変更し、それぞれ管理できる。
キャッシュはsqliteで行われる。ファイルを削除すれば、キャッシュの削除ができる。

StringIO

pd.read_jsonに指定するのはファイル名、URLなので、requestsで取得したstrはそのままだと指定できない。
StringIO(content)とすることで、strをファイルのように扱うことができる

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?