web-dev-qa-db-ja.com

Pythonは、APIページ付けを使用して引数/処理を要求します

私はAngel List(AL)APIをいじくり回していて、サンフランシスコのすべての求人を取得したいと考えています。 APIのアクティブなラッパーPython=ラッパーを見つけることができなかったので(何か進んだ場合は、自分で作成したいと思います)、リクエストライブラリを使用しています。

AL APIの結果にはページ番号が付けられており、結果の最初のページを超えて移動する方法がわかりません。

これが私のコードです:

import requests
r_sanfran = requests.get("https://api.angel.co/1/tags/1664/jobs").json()
r_sanfran.keys()
# returns [u'per_page', u'last_page', u'total', u'jobs', u'page']
r_sanfran['last_page']
#returns 16
r_sanfran['page']
# returns 1

requests.getに引数を追加しようとしましたが、うまくいきませんでした。私はまた、本当におかしなことを試しました。「ページ」キーの値を変更すると、魔法のようにページ分割されます。

例えば。 r_sanfran['page'] = 2

それは比較的単純なものだと思いますが、それを理解することができないので、どんな助けも素晴らしいでしょう。

いつもありがとう。

Angel List APIドキュメント 役立つ場合。

20
crock1255

読んだ last_pageそして、範囲内の各ページに対してgetリクエストを作成します。

import requests

r_sanfran = requests.get("https://api.angel.co/1/tags/1664/jobs").json()
num_pages = r_sanfran['last_page']

for page in range(2, num_pages + 1):
    r_sanfran = requests.get("https://api.angel.co/1/tags/1664/jobs", params={'page': page}).json()
    print r_sanfran['page']
    # TODO: extract the data
20
alecxe

@alecxeの答えの改善:PythonジェネレーターとリクエストHTTPセッションを使用すると、多数のページまたは非常に大きなページをクエリする場合に、パフォーマンスとリソースの使用率を改善できます。

import requests

session = requests.Session()

def get_jobs():
    url = "https://api.angel.co/1/tags/1664/jobs" 
    first_page = session.get(url).json()
    yield first_page
    num_pages = first_page['last_page']

    for page in range(2, num_pages + 1):
        next_page = session.get(url, params={'page': page}).json()
        yield next_page

for page in get_jobs():
    # TODO: process the page
10
dh762