Вложенный цикл while для коллекции API json - PullRequest
0 голосов
/ 08 мая 2018

Я запрашиваю 590 страниц из Meetup API. Я повторил цикл while, чтобы получить страницы. Теперь, когда у меня есть страницы, мне нужно запросить эти страницы и правильно отформатировать их как python, чтобы поместить в фрейм данных Pandas.

Вот как это выглядит, когда вы делаете это для one url:

url = ('https://api.meetup.com/2/groups?offset=1&format=json&category_id=34&photo-host=public&page=100&radius=200.0&fields=&order=id&desc=false&sig_id=243750775&sig=768bcf78d9c73937fcf2f5d41fe6070424f8d0e3')
r = requests.get(url).json()
data = pd.io.json.json_normalize(r['results'])

Но поскольку у меня так много страниц, я хочу сделать это автоматически и перебрать их все.

Вот так появились вложенные циклы, и вот что я попробовал:

urls = 0
offset = 0

url = 'https://api.meetup.com/2/groups?offset=%d&format=json&category_id=34&photo-host=public&page=100&radius=200.0&fields=&order=id&desc=false&sig_id=243750775&sig=768bcf78d9c73937fcf2f5d41fe6070424f8d0e3'

r = requests.get(urls%d = 'https://api.meetup.com/2/groups?offset=%d&format=json&category_id=34&photo-host=public&page=100&radius=200.0&fields=&order=id&desc=false&sig_id=243750775&sig=768bcf78d9c73937fcf2f5d41fe6070424f8d0e3').json()

while urlx < 591:
   new_url = r % urls % offset
   print(new_url)

   offset += 1  

Однако, это не работает, и я получаю много ошибок, включая эту:

SyntaxError: ключевое слово не может быть выражением

1 Ответ

0 голосов
/ 08 мая 2018

Не уверен, что вы пытаетесь сделать, и в коде много проблем.

Но если вы просто хотите просмотреть циклы от 0 до 591 и получить URL-адреса, то вот код:

import requests
import pandas as pd

dfs = []

base_url = 'https://api.meetup.com/2/groups?offset=%d&format=json&category_id=34&photo-host=public&page=100&radius=200.0&fields=&order=id&desc=false&sig_id=243750775&sig=768bcf78d9c73937fcf2f5d41fe6070424f8d0e3'

for i in range(0, 592):
    url = base_url % i
    r = requests.get(url).json()
    print("Fetching URL: %s\n" % url)

    # do something with r here
    # here I'll append it to a list of dfs

    dfs.append(pd.io.json.json_normalize(r['results']))
...