2017-04-20 35 views
2

Pythonを使用してCSVバージョンのAPI呼び出しをページングする方法を教えてください。CSV(ページ区切り)のページ番号

JSON呼び出しのメタデータにはレコードの総数が含まれていますが、CSV呼び出しには似たような情報は含まれていません。ページパラメータを増やそうとするとループを止める場所がわかりません。

以下は私のコードです:これは最初の20回の結果とのデータフレームをロード

url = 'https://api.data.gov/ed/collegescorecard/v1/schools.csv' 

payload = { 
    'api_key': '4KC***UNKk', 
    'fields': 'school.name,2012.repayment.2_yr_default_rate', 
    '_page' : '0' 
} 

r = requests.get(url, params=payload) 
df = pd.read_csv(r.url) 

が、私はすべての結果をデータフレームをロードしたいと思います。

+0

カウントを含める必要があります。カウントがデータフレームに読み込まれた後に満杯になった後、データフレームへの読み込みはapiの模倣によっては機能しません。 – sb0709

+0

@ sb0709カウントを終了するタイミングを知る方法を教えてください。もし私が余分なループをするのは、それが壊れるよりも。 –

+0

休憩の必要はなく、それぞれ20回の結果ですべてを読み取り、結果7000回までループします。 Aswerのベローはapiのオプションについて説明していますが、私はより多くの廃止の方法を好みますが、私の好みです。 – sb0709

答えて

1

&_per_pageオプションパラメータを使用して、1コールあたりの選択肢数を編集します。 &_per_page=200に設定すると、100行のCSVが返されるため、100が最大であると想定できます。

今では、コールごとの最大値を知っている、と我々はそうのように、私たちが必要なものを得るためにforループを実行するために、総呼び出し、その可能性を持っていること:その結果をループになるまで意志

url = 'https://api.data.gov/ed/collegescorecard/v1/schools.csv' 
apikey = '&api_key=xxx' 
fields = '&_fields=school.name,2012.repayment.2_yr_default_rate' 
pageA = '&_page=' 
pageTotal = '&_per_page=' 
pageNumbersMaximum = 10 
rowSum = 200 
for page in range(pageNumbersMaximum): 
    fullURL = url + pageA + str(page) + pageTotal + str(rowSum) + fields + apikey 
    print(fullURL) 
    print("Page Number: " + str(page) + ", Total Rows: " + str(rowSum)) 
    rowSum += 200 

それは合計7000になる。

+1

助けてくれてありがとう。ここでの課題は、ループを止めるところです。 7000はほんの一例でした。しかし、問題は、余分なループを作成して生成するループの数がエラーを引き起こすかどうかわからないことです。 –

+0

okの場合、各呼び出しはtry/exceptでラップされ、失敗するとループが中断されます。私は自由な時間があるときにこれを編集します。 – albert

+0

@TimErnstこれは、実際にはもっと難しい(少なくとも私にとっては@)と思われます。回答の数を超えると、まだcsvのダウンロードがあります。そのバンク、しかしあなたはまだ1つを得る。最低1つの認証層が必要です... – albert

関連する問題