Как исправить разбиение запроса python на страницы, которое не работает

#python #python-requests

#python #python-запросы

Вопрос:

Я пытаюсь выполнить разбиение на страницы с помощью запроса python, но, похоже, я не могу получить полную страницу, а также ответ JSON не обновляется при смене страницы.

 url = 'https://www.walmart.com/store/1003-York-pa/search?query=ice cream'
api_url = 'https://www.walmart.com/store/electrode/api/search'

    params = {
        'query': word,
        'cat_id': 0,
        'ps': 24,
        'offset': 0,
        'prg': 'desktop',
        'stores': re.search(r'store/(d )', url).group(1)
    }

    data1 = requests.get(api_url, params=params).json()
    

    num_pages = data1['pagination']['pages'][-1]['page']

    for page in range(0, num_pages   1):
 
            params = {
                'query': word,
                'cat_id': 0,
                'page':page,     // try to update the new page
                'ps': 24,
                'offset': 0,
                'prg': 'desktop',
                'stores': re.search(r'store/(d )', url).group(1)
            }

     data = requests.get(api_url, params=params).json()
  

Что я делаю не так, и как я могу это исправить?

Комментарии:

1. Ваш отступ в последней строке неправильный, он должен быть вложен внутрь for цикла. Таким образом, он проходит через цикл и только после этого выполняет один запрос для последней страницы.

Ответ №1:

Во вторых params настройках (внутри цикла for) вам нужно удалить 'offset': 0, , потому что он каждый раз указывает серверу извлекать самый первый результат первой страницы. Это единственная основная ошибка. После этого исправления я начал получать разные продукты для каждого запроса страницы.

Во-вторых, цикл for, вероятно, должен начинаться с 1 , поскольку страницы нумеруются с 1, как я вижу по ответу.

В-третьих, вероятно, второй requests.get вызов должен быть внутри разбиения на страницы для цикла, или вы просто копируете вставленный код с неправильным отступом.