во-первых, я очень новичок в 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»?
А как насчет непосредственно перед использованием??
Похоже, ваша проблема связана с тем, как переменная full_url
создается внутри цикла. full_url
устанавливается до начала цикла и не обновляется внутри цикла, поэтому обновленное значение предела не используется в последующих запросах.
где в цикле я бы поместил «full_url»?
Удалите 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)
Это проблема:
full_url = f'{base_url}{limit}{query_params}{offset}'
Кажется, вы рассматриваете это как постоянную формулу, которая будет обновляться по мере изменения ее составных частей.
Python работает не так.
Значение full_url
присваивается ОДИН РАЗ, и на этом все. Изменение full_url
позже не имеет никакого эффекта.
Вам нужно переназначать offset
каждый раз в цикле.
Или вы можете изменить full_url
на функцию, которая собирает и возвращает новую строку URL-адреса каждый раз при ее вызове.
вы упоминаете функцию, как это делается? или где в цикле я бы поместил «full_url»?
Проблема в вашем коде заключается в том, что переменная full_url не обновляется в цикле. В настоящее время full_url определяется перед циклом и никогда не обновляется внутри него, поэтому параметр limit не меняется в последующих запросах.
Чтобы это исправить, вам необходимо обновить full_url внутри цикла после обновления значений предела и смещения.
где в цикле я бы поместил «full_url»?
Вы забыли заново создать
full_url
после изменения переменных.