Выполнение обновления переменной в цикле API

во-первых, я очень новичок в Python проблема, которую я получаю, заключается в том, что в выходном URL-адресе переменная "limit" не обновляется во втором цикле отображается: https://website.com/table1/?key=xxxx&limit=0,+100 когда я хочу, чтобы это отображалось https://website.com/table1/?key= xxxx&limit=100,+100

я вижу, что предельная переменная увеличивается на 100, но она просто не передает ее на URL-адрес API

import requests
import json
import csv
import pandas as pd
import os
 
os.remove('ladder.csv')
os.remove('ladder.json')
 
 
# Define the base URL and parameters
base_url = 'https://website.com/table1/?key=xxxx'
 
query_params = ",+"
limit = 0
offset = 100
full_url = f'{base_url}{limit}{query_params}{offset}'
 
 
# Function to fetch data from the API
def fetch_data(full_url):
    response = requests.get(full_url)
    print (response.url)
 
    print (offset)
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: {response.status_code}")
        print("Response content:", response.content)
        return None
 
# Initialize variables
all_data = []
has_more_data = True
     
# Loop to fetch data with pagination
while has_more_data:
    # Fetch data
    data = fetch_data(full_url)
     
    if data:
        # Debug: Print the response structure
         
        print(limit,offset)
         
        # Check if 'results' key exists in the response
        if 'ranking' in data:
            # Process the data (example: extend the all_data list with new records)
            all_data.extend(data['ranking'])
             
            
            # Check if there is more data to fetch
            if offset >= 1000:
                    has_more_data = False
            else:
 
                if len(data['ranking']) < limit:
                  has_more_data = False
                 
                else:
                # Update the offset for the next request
                  limit += offset
        else:
            print("Key 'ranking' not found in the response")
            has_more_data = False
             
    else:
        has_more_data = False
         
# Example: Save all data to a JSON file
with open('ladder.json', 'w') as f:
    json.dump(all_data, f, indent=4)
 
print("Data fetching complete. Total records fetched:", len(all_data))
 
with open('ladder.json', encoding='utf-8') as inputfile:
    df = pd.read_json(inputfile)
 
df.to_csv('ladder.csv', encoding='utf-8', index=False)

Вы забыли заново создать full_url после изменения переменных.

Thierry Lathuille 22.07.2024 20:56

где в цикле я бы поместил «full_url»?

Trevor Turn 22.07.2024 22:39

А как насчет непосредственно перед использованием??

Thierry Lathuille 22.07.2024 23:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
60
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Похоже, ваша проблема связана с тем, как переменная full_url создается внутри цикла. full_url устанавливается до начала цикла и не обновляется внутри цикла, поэтому обновленное значение предела не используется в последующих запросах.

где в цикле я бы поместил «full_url»?

Trevor Turn 22.07.2024 22:28

Удалите URL-адрес из указанного вами места и добавьте его сюда. # Loop to fetch data with pagination while has_more_data: # Fetch data full_url = f'{base_url}&limit = {limit}{query_params}{offset}' data = fetch_data(full_url)

Ayush Sharma 23.07.2024 11:13

Это проблема:

full_url = f'{base_url}{limit}{query_params}{offset}'

Кажется, вы рассматриваете это как постоянную формулу, которая будет обновляться по мере изменения ее составных частей.

Python работает не так.

Значение full_url присваивается ОДИН РАЗ, и на этом все. Изменение full_url позже не имеет никакого эффекта.

Вам нужно переназначать offset каждый раз в цикле.

Или вы можете изменить full_url на функцию, которая собирает и возвращает новую строку URL-адреса каждый раз при ее вызове.

вы упоминаете функцию, как это делается? или где в цикле я бы поместил «full_url»?

Trevor Turn 22.07.2024 22:27

Проблема в вашем коде заключается в том, что переменная full_url не обновляется в цикле. В настоящее время full_url определяется перед циклом и никогда не обновляется внутри него, поэтому параметр limit не меняется в последующих запросах.

Чтобы это исправить, вам необходимо обновить full_url внутри цикла после обновления значений предела и смещения.

где в цикле я бы поместил «full_url»?

Trevor Turn 22.07.2024 22:39

Другие вопросы по теме

Похожие вопросы

Могу ли я превратить столбец Pandas Dataframe, содержащий строку jJSON, в дополнительные столбцы и строки?
Как создать сетку на основе списка координат?
Как я могу помешать регистратору перегонного куба деактивировать мои собственные регистраторы после использования команды перегонного куба в коде?
Строка Python: извлеките дублированную и случайно объединенную подстроку
Как исправить этот Reg ex, чтобы он соответствовал словам, написанным через дефис, где последний сегмент заканчивается на согласную, отличную от буквы m?
Нужно ли мне использовать распознавание именованных объектов (NER) при токенизации?
Построение звездных карт в экваториальной системе координат
Случайная стратифицированная выборка у панд
Как я могу настроить оповещение или звуковой сигнал в случае поломки моего кода? (В идеале на Python)
Цикл for не добавляет массив с регулярным выражением