Обзор вариантов прохода по пагинации

Описание различных методов прохода по страницам на сайте

  1. Support Юра
    Множество ресурсов в сети имеют многостраничную структуру. Как правило, это различные интернет-магазины, каталоги, новостные ресурсы... В A-Parser существует несколько способов, с помощью которых можно реализовать проход по пагинации. В связи с их разнообразием, становится актуальным вопрос выбора нужного алгоритма, который позволит максимально эффективно переходить по страницам в процессе парсинга. Особенность заключается в том, что на некоторых сайтах решить задачу с пагинацией можно любым из способов, тогда как на другом - будет работать только один из них. Постараемся разобраться с каждым из способов подробно.
    В нашей статье для обозначения процесса прохода по страницам будет использоваться термин "пагинация".

    В A-Parser существуют такие способы для прохода пагинации по страницам сайта:
    • функция Use pages
    • функция Check next page
    • использование макросов подстановок
    • написание JS парсера
    • инструмент $tools.query.add
    Рассмотрим каждый вариант на конкретном примере.

    Use pages. Данная функция позволяет проходить по пагинации с указанием наперед известного числа страниц.
    Для примера возьмем одну из категорий на сайте каталога товаров https://www.proball.ru/catalog/myachi/. Вверху и внизу мы видим панель пагинации. При клике по пиктограмах с номерами страниц можно увидеть в строке браузера, как осуществляется передача параметра с номером страницы в конце запроса:
    Код:
    https://www.proball.ru/catalog/myachi/?PAGEN_1=1
    Use pages это своего рода счетчик, который фактически в переменную $pagenum подставляет по порядку номера, увеличивая их на то значение, которое мы укажем. То что нам нужно. Сделаем пресет, который, например, будет собирать все ссылки на товары, которые размещаются на страницах вышеуказанной категории товаров.
    [​IMG]
    Как видно на скриншоте, в формате запроса парсера в нужном месте используется переменная $pagenum. Функция Use pages переберет и подставит в запрос все значения, фактически мы будем получать ссылки для запроса
    Код:
    https://www.proball.ru/catalog/myachi/?PAGEN_1=$pagenum
    где вместо переменной $pagenum будет подставлен номер страницы, начиная от 1 и до 4 с шагом 1.
    Таким образом, получается проход по страницах нужного диапазона. В этом заключается ограничение данного метода - нужно заранее знать количество страниц, которые есть в пагинации. Очевидно, что при одновременном парсинге нескольких категорий, количество страниц везде будет разное, и как выход, мы можем просто указать большее количество предполагаемых страниц. Но это не совсем правильно, поэтому есть более оптимальное решение, о котором речь пойдет дальше.
    eJx1VNtu2kAQ/ZVqhJSgUAhV+2I1jSgqvSgCmtAnjKKtPTZu1rubvXAR8r931jY2
    pOmTvWfPXM7M7BzAMvNk5hoNWgPB8gCq/IcAnME5SxF6oJg2qP31EqZog+DbYjEn
    PMaEOW6hdwC7V0g2coNaZ7E3ymI6p1LGY1meN4w7oizfXV+vitYicsbK/B5N6Qh0
    9RMsKWiKxgdhlsHK36S4I4OP7E3EmTE3IaQU6m1mMX98XCOLUYcQhuZqrTGh28v+
    1W03hE9Q2y6qgGkTpQaY1mxPYPmdstxjPBNPpiF65SUEp5lLZTMpzFFqXS7TSoWh
    9xrHmecxDsGhEvVgUdW3/hxJJ3y930NR/L+Szw71PpE6Z/YkQqeEb+ejr1+mj8Ob
    jvcnXA7FatUkP6mMiKyG/VJYv/JzebG2VplgMNhut32l5W/GeV+7jieFobjothV4
    YBtcSHKSZBxbeEKnumQdahT626P3bj8ym7MKVJn4arbZ/RLZcylFSOJ6ORmaiZY5
    QRZ3tgb3RxXLWrMfCVfa/qxsIEgYN9gDQ6lOGCUSv7yhUdHMSj2rO0cNkWLE+R1u
    kLe00v9nl3GaKDNKyOh7bfg6ZfaPj6KRdxqKOrrVlENLiuWdTI/anxBVU42pR3Kp
    sXFQR6790otVKPxgtM0YqRY6S/Cs4OdgJEWSpbN62I5MJxa0FmZiLHPF0WcsHOc9
    P+P3beNHpi6wP7QJvjQelyEorWZdgJWSmx8PVapKZzRYH5rmE/r6XA4iWgVcpoN8
    z6J1NiBbQjCVNA1+c5XjQi9Hl/J6gDvFRIxUEasdFqti1ayyZuEdThZacKAHCH/M
    vOJ4VZ5BGJXHUBcgGBZ/AXULzRU=
    Детальнее о Use pages: https://a-parser.com/wiki/net-http/#Возможности

    Сheck next page. Это еще одна функция, которая позволяет организовать проход по пагинации. Особенность ее использования заключается в том, что для перехода на следующую страницу, нужно использовать регулярное выражение, которое будет возвращать ссылку на следующую страницу. Это более удобный и наиболее часто применяемый способ. Но применить его для https://www.proball.ru/catalog/myachi/ не получится, т.к. в коде нету ссылок на следующие страницы. Ссылки там генерируются скриптом. Поэтому возьмем в качестве примера сайт http://www.imdb.com/search/name?gender=female. Здесь есть пагинация как в начале так и в конце списка. Посмотрев и проанализировав исходный код, можно увидеть наличие ссылки, которая позволяет переходить на следующую страницу:
    [​IMG]

    Проанализировав исходный код, составим регулярное выражение, которое будет получать ссылку с этого элемента. Составим пресет:
    • в поле Next page RegEx запишем регулярное выражение
    • в поле Limit укажем количество страниц, которое нужно пройти
    В примере указано "4". Указав лимит, мы определяем, сколько страниц парсер должен пройти. В нашем случае будет пройдено 5 страниц, так как отсчет начинается с 0. Если указать лимит "0", то парсер будет работать до того времени, пока не пройдет все страницы в независимости от их количества. Это очень удобно использовать, когда нужно спарсить все результаты со всех страниц.
    [​IMG]
    eJx1VGFT2kAQ/SuZG2aUggGq4DSijnXG2qpAlY4fCM6cZANXL7n07iJYhv/e3RAS
    sO0XuH3ZvX1vd2+XzHLzYgYaDFjDvNGSJdmZeWwyg8lLDxZ2wKfA6izh2oAmpxHr
    gfW86+FwgHgAIU+lZfUls28JYKR6Ba1FQEEiQHuqVHCpMvuVyxRdRh+bzfHq/xEp
    ZjrAtLEtY9id+i2k5I2223T2H0UcqLlxekOn47ZOHLQ7RyfOonNUdS6SRMIjPN8I
    22gfHruHHWf/5np4d1t3pHgB5wsKU1XncqZVBI32J7fpHjaPW26r1XYeeMi1yMPY
    FsVJaqyK7sFkWpleH7wR1mUKhurALWdj+jKFBQZ0TcJjZyK5Mac+k8JY1CQsRAdI
    HRZuzWdnvm8+7Lu18yodur7foBhCa10+ejob19Yeo6fueMuJn7E8zXDNbVoQygGu
    NX9DMPvv8YgwSm0KR+oji9PoGZGYHHbakVihYrPpxvtJ2DSky52ZhhDVrTUwIv5O
    MFXnIMZYh34y02fELAgEJeGSecvdDLciEjSAR2y1Go8LwldKR5zwStJyMzFumEH7
    exUS4lRIh+/He9VS5QN/haHCoFBIKOErtPKyVLBvQF83t1Vdu7A7DNeZqWIlmx+x
    +JUVIVboi0ctwFzhQCFkIbuAwLcN6xGrZDZNSJrFfl/HMC/k0kCdGaR6xZFI8P4L
    itXcKt3P24IFU/GFlLfwCrJ0y+7/nAoZ4DO9CDHoax74b5f+X3esCnnbqfBtzjVy
    KJ0CdaumG+0vAElRjR4hkdJQXJBnzu/FTZNATENVNgOfawHtENwp+C44UXEopv18
    bWw803iI66wfX6oINwAxjlMp67RO7svGX5i8wGSUBN8HX2YpkFax4JhVSppvD2uq
    iRY4WO2i+YjOrE28RmM+n7siCp7diYoaBriezBo0m+e40FDCaQgRz6ZxgqM3VTgU
    tHizqaHhMZQKFrgJAsCyWJ3CarwaFxu42NbLrT3sLVfYmJ9msPYhaeSBGNbIYCuY
    11r9ASIaBUM=
    Детальнее о Check next page: https://a-parser.com/wiki/net-http/#Возможности

    Как было сказано выше, есть возможность динамически ограничивать количество страниц в Use pages. Для этого нужно совместно использовать Use pages и Сheck next page. Дополним пример, который был рассмотрен при описании Use pages и добавим в него функцию Сheck next page:
    [​IMG]
    Эти две функции в паре работают следующим образом: Use pages обеспечивает проход по страницам, а Check next page проверяет, существует ли следующая. Как только Check next page не найдет следующей страницы, парсинг этой категории будет остановлен, не дожидаясь прохода по всему количеству, которое указано в Use pages. Совмещая эти функции, мы добавляем эффективности в работе парсера, экономя время и ресурсы.
    eJx1VNtuGjEQ/ZXKQkqiEC6V+rJqGtGo9KIIaEKfWBS5u7OLi9d2bC8EIf69M3uF
    XJ52fTyXM2fGs2eeu7WbWXDgHQsWe2aKfxaw3MGMp8C6zHDrwNL1gk3AB8GP+XyG
    eAwJz6Vn3T3zOwPoozdgrYjJScR4TrWOb3Vx3nCZo8ni42CwPLQeUe68zu7BFYGY
    LX+CBSZNwVES7jlb0k0Kz+jwmX+IJHfuOmQpproSHrLHxxXwGGzIwtBdriwkeHve
    u7y5CNkXVvnOy4Rpk6UCuLV8h2DxnfCMMCnU2jWGVHkBsWPm2nihlatLreRybals
    SFHjWJAdlyzYl0U9eDDVLZ0jnSvSezgYsMPhfS2fcrC7RNuM+6McnQK+mY2+f5s8
    Dq87FFHlGXufaLSCaD2BZ191t45EQl8pxK8oxjVpGV+G7FUNJ/53IhNEnqgvl41g
    45Im0jPDXiFmr2R+frby3rig399utz1j9V8uZc/mHTIKQ3V20ar+wDcw1xgkERJa
    eIynqk0d5Ax0W0e/6EVuc8K4ZEIdbNn9UeKpKFlptCUBBbix1RlCHgurwF1dxaJS
    mcYwL3x/lz4sSLh00GUOqY45Eolf3uB4Wu61nVZNQAG1Gkl5BxuQrVkR/2suJE6x
    GyXo9LNyfNtk+irGoSnvOBXO0NYih9Yo1nc6rWtfA5hGjQkhmbbQBKgyV3FxSxhQ
    NEJtM0amhU4Ingh+CkZaJSKdVuNdW+Zqjqtoqm51ZiQQY5VL2aV3dd82fuQqgenQ
    EnzpfFukoKGuVxTzWkv366GkaqzAwfrUNB/Rt+eyH+GrkDrtZzserUQffRGBVOM0
    0LYsxgWfmC3K6zJ4NlzFgIoMD8vDstmdzYbdH23QYI/vnf1zs9KGSiILxFAbhy2g
    KP8Byg3yDQ==

    Макросы подстановок. Следующим решением, которое позволяет организовать проход по пагинации, можно считать макросы подстановок. Макросы подстановок позволяют реализовать последовательную подстановку значений из указанного диапазона. Сделаем пресет для уже известного нам сайта, в котором будет подстановка значений с помощью макроса:
    [​IMG]

    Данный пресет будет работать следующим образом. Указав в формате запроса шаблон
    Код:
    $query?PAGEN_1={num:1:10}
    мы добавляем подстановку значений от 1 до 10 (диапазон можно указать любой) в сам запрос. Таким образом мы получаем запросы вида
    Код:
    https://www.proball.ru/catalog/myachi/?PAGEN_1=1
    https://www.proball.ru/catalog/myachi/?PAGEN_1=2
    ...
    https://www.proball.ru/catalog/myachi/?PAGEN_1=10
    которые обеспечивают проход по нужному количеству страниц.
    Использование макросов подстановок для прохода по пагинации похоже на функцию Use pages и имеет такие же ограничения, то есть нужно указывать конкретный диапазон значений. Преимуществом данного метода можно считать то, что через макросы подстановок можно подставлять разные значения, как числовые, так и текстовые, например, слова или выражения. Таким образом мы можем более гибко вставлять нужные части в запросы или формировать сами запросы из частей, которые будут размещаться в разных файлах, если этого требует задание.
    eJxtVFtP2zAU/iuTVQkQXUsn7SUaQx2iu4i1HXRPTYW85CT1cGzPx+lFUf47x26a
    AOMp8Xcu3+dzccUcx0ecW0BwyKJlxUz4ZxH7yROr8WbH+sxwi2C9fcmm4KLo22Ix
    JzyFjJfSsX7F3N4ABekNWCtSIKNI6ZxrnV7rcN5wWZLL8sPFxaruIpISnS7uAEMi
    Zg8/0ZJIc0BPwh1nK2/JYUcBn/i7RHLEy5jlRPVeOCgeHtbAU7Axi2M8X1vIyHo6
    OL86i9ln1sQuDoR5y9IA3Fq+JzB8p7zwmBTqEVtHf/MAsVW9WrXoRNuC+1L1zGgQ
    IgZZgE5P1s4ZjIbD7XY7MFb/4VIObNnzTnGsTs661Pd8AwtNSTIhoYMndGq09KgC
    4K3H7GeDBDdecJoKJ7Ti8qDEy+zU/Vbiny84U5p86dcKwInVBUEOdq4B98dbLFkv
    nK/m468304fRZaXKIhpFo4val78M6X4d0rAo4xKhz5DUTzhpS19bqC2WO21nxksk
    vGJajaW8hQ3Izi1QfimFpO7hOKOg703g2y6z/3LU7Y2fU9Ecbi1p6JxSfavzYzke
    AUxboKlHCm2hTdAwN3lpPQwoP85df8amg14IfNGDl2CiVSbyWbMiR89SLWgHZ+pa
    F0aCV6xKKangCHfdLIyxKbA/dAJfB18HCpLVriZzWkv8cX+QaqygWfvYzgOhb4/q
    MKG1kzofFnuerMWQYgmBXNt9eCbCBPlBQs8BO8NVClQPZ0uoaUvaR6N9W6pnT0dU
    1dSRvzg/+Pg7eQ/CqDhIPWDRqH4C36ybyg==
    Детальнее о макросах подстановок: http://a-parser.com/wiki/query-format/#Макросы-подстановок

    JavaScript парсеры. В A-Parser существует такой мощный инструмент, как JS парсеры. В таких парсерах также можно реализовать проход по пагинации на страницах сайтов. Более того, если если с помощью вышеописанного функционала не удалось сделать проход по пагинации, то на помощь приходит именно это решение. Сделаем один из вариантов решения задачи с пагинацией для уже знакомого нам сайта. Используя простую конструкцию
    Код:
    for(let i = 1; i<=this.conf.page_count; i++) {
         this.logger.put('Parse page ' + i);
         let link = set.query + '?PAGEN_1=' + i;
         let response = yield this.request('GET', link, {}, {
              decode: 'utf8',
         });
    мы в цикле перебираем номера страниц и вставляем их в ссылку. Количество страниц для перебора, задается через интерфейс парсера и содержится в переменной this.conf.page_count. Также нужно сделать проверку на наличие следующей страницы:
    Код:
    if(/data-next-page=\d+/.test(response.data)) {
         this.logger.put('No more pages');
         break;
    }
    В результате получим проход по пагинации, например, укажем 30 страниц:
    [​IMG]
    Как видно на скриншоте, парсер прошел 15 страниц, увидел, что нету следующей страницы и остановился.
    Это базовый пример, который демонстрирует один из вариантов решения задачи. Используя всю силу и гибкость разработки на JS, можно с легкостью дополнить и расширить этот пример.
    eJyNVltz4jYU/iuKhhlDIQaazV6cpTvpTrLtTjZJm/QJmIxiC9BGWK4k5zKM/3vP
    EbIdjNutHhKf+6dzExtqmXkw15obbg2NphuauW8a0e/mmi1FyqxQKR3QjGnDNepM
    6debKGqIE75gubR0sKH2JeNgrx651iLhIBQJ0Blb8rtY5Sko0Ucmc1Q6GtFiPh9Q
    CArW5lzpNcPgnWwceiSV8IY98lsFwoWQvGafA3XJ1uitkzDLURounKNuL7TP6IEl
    iUCgTG4j4DXqqH+l4m+HJlWgC59acHOu1RpYljsHyHwp0U1px9EUXOTO9o+tDY0W
    TBo+oAagnjMAkjQlwnLNrNJXGeIB/oaq9FTKC/7IZa3m/P+aC5lAzk8XYPS7N2xX
    udrzUVTXex0KavKkAUOtlKgLtSzv/sB5VmXjEjlrpXnlwEf2fqFrMp5iaetinGY1
    awfgTsJ3mbFKF2J55dul1MzTW2jNq/SzWmeSI+I0lxISbvifdeFPjU8wEjXApvFn
    FwJgVW1KrVLSfL3ZQs20gMY6rooP3JW1mYmGw6enJ+hEdc+kDHU+jJllUi2H6xcW
    r8QQbIHDlwq6AafHtQt2jcEY/DljacIhH1bnvJgX82qOqpHb7E9TtCmgMMhyqni1
    f1PcmdLwOwKPJTOGbG3JZpYSOJBiAxBi6J9ur2TisSthQp8UTBKZvJbigbIY8B2R
    YBSOw/EoGOzKfUmjph0epjV7aRfhAYBZRKbBNyZSRxApjA0GZDoNpEgf4Cu4wP/z
    +XzfQ7HLKtpx3W03QURmtIMhys0QdDDCDE4a9Ga0YeyKFCvoxlbwP49GERkP/htA
    ve8gd5C3WlqczNJGCTjsJ3Yvua/BdNfVNKidYXqCWK3v1b16xgxB/cGslIyRNQ7m
    7nvkiNGWOnLUkafeOOqNp44ddeypt45666l3jnrnqfeOeu+pD476MCrj+YCj3YrN
    T7bfRXntn1x+uzAAg7JOO10JI0tMHsccGnlCxie1BKrXRalwfCI+Tlz6cIWEdY5A
    0O/3GoVzijC6S67DLIcOcCPiykQC0ieid7JrgHGwSSAUIA3dOgO94NP16Zezy7vx
    xFm1GMGVMhg4DoYvgstkG1pz8GAg7pezW0gTeh6QTTFoa7DENR/0DcutOlzZtWyO
    XdFEKxbdgzJw6JPXa/O9l4czrZUmCha3S0bQ9IynrsaoRXqvOXto8BvjuQfW1z10
    c38wmZAcNuVCpDxpRb3N6xI2KmAYfmTErbnJjC7h0TiEF219d7fiDF6VGZ3NTH+l
    +QKk3bD/Ccb7l+GyBbavVYvkaQU7lyBGiLYNG/JnHnerDMMvDdZrRYrn9eUgyWbV
    dVnPrZDwV0v8cfHb7bcL9Dcdw/AE7c9N0GsrRnPz/SDTB0MEe5jC03SIBZ5ghpL+
    jA5DfKf+z532euZSEfxl4BrGtHbMD3ri1WeVrKrH/NfJax2b67RUrfdJQfGp9G8U
    jcbFP4/PNX0=
    Детальнее о JavaScript парсерах: https://a-parser.com/wiki/js-parsers/

    $tools.query.add. Ещё один способ прохода по пагинации можно реализовать с помощью инструмента $tools.query.add. Он позволяет добавлять запросы к уже существующим прямо во время работы задания, формируя их "на лету". Сделаем пресет, который продемонстрирует использование данного инструмента. Для примера используем уже известный нам сайт http://www.imdb.com, попробуем спарсить имена знаменитостей женского пола. Проход по пагинации реализуется следующим образом:
    • в исходном коде страницы регулярным выражением парсим ссылку на следующую страницу
    • используя $tools.query.add, подставляем ее в запросы
    Пресет будет иметь следующий вид:
    [​IMG]
    Вся логика работы пресета заключена в шаблонизаторе, где мы указываем как должны подставляться запросы и до какого уровня это нужно делать:
    Код:
    [% limit = 4;
    IF p1.np != 'none';
        tools.query.add('http://imdb.com' _ p1.np, limit - 1);
    END;
    p1.mas.format('$name\n') %]
    где limit - переменная, в которой содержится кол-во страниц, по которым нужно пройти,
    а p1.np - переменная со ссылкой на следующую страницу.

    Таким образом мы можем организовать проход по пагинации сайта, с указанием количества страниц, используя инструмент $tools.query.add. Благодаря проверке
    Код:
    IF p1.np != 'none';
    парсер остановится, как только не сможет найти ссылку на следующую страницу.
    Данный метод позволяет организовать проход по пагинации на тех сайтах, где это нельзя сделать с использованием всех вышеописанных способов. Например, когда ссылку для следующей страницы нужно генерировать из нескольких параметров, используя при этом какие-то вычисления, и при этом не используя JS парсеры. В этом и состоит главное достоинство такого способа организации прохода по пагинации.
    eJylVG1zEjEQ/isxUwew9ABb6nhtdWotVq30DccPHDqR24PYXHJNcoXK8N/dhOOu
    Rb/5JZPd7Muzu092QS0zt+ZSgwFraDhc0MzfaUitUsJc5aAfTue0STOmDWhnM6R9
    sGF4Nhhcoj6GhOXC0uaC2ocM0FHdg9Y8BnzkMcoTpeIT5eV7JnI0Gb5st0fLymOc
    G6vSazA+ENWrS0hjZpmXJzBH8ZCRqYbkKKL1YPttI6JRZLbHghmDKsGNBb2TsQns
    SJhb4g4vRnQdY7BKx8schSIRzOVlWrOHPks9pCnLSjNXNZUZ/S/MwbaD+waPF/Xh
    98ORqwDvh1HUYk677W7T3TcbYCebYD3KDbQpMxtgnf4x3M2h5DjMHWyOtNVY6Bf1
    mwvBWt2gTerfuIzVzJD+gOwHnQOC8v7eAZnv7zXIcZYJ+AY/P3Pb6u6+Cnb3Sf3z
    2eDLeZMIfgvkA4xvVYOcTLVKodV9HbSD3farTtDpdMkNS5jmhRtdjkYl8J7SKXM9
    HD7HMCm35IjsHUTyY49knUBm5NkRqUkloYbKyHqCBneOoQGL43ptam0Wtlo8jX8G
    Y5XWyI+VX7OItkM6DfQ87b93/hLfsG9B4rPWa1uuZ1Ekaw3yfFR184bdw0A5knAB
    lbqHUtH8LRw5uNd1qEZg555PccwtV5KJVWVuMlW1XyW/812XCm1dGRxMDxvm/h74
    AL62dVeGdMvLFEPk3vdq5UPDhAkDTWoQao8hkHjzhePXYFbpi8zhQf2CKnksxDnc
    g6jMfPx3ORcx/vTjBJ0+Fo7/Nrn4K8ayLO9xKuTeTCOGyihW52qyrv0WICu70Xea
    VGkoAxSZi7i4qzKQjsLVMJCOpeoJwCcNf6ocK5nwyUXxLdaWuRzgQryQJypFhjvE
    Mhei6b7LdTX4Y1M02AkVwE3nE5/C7YT1jlwt1U83K6iZ5kisbjl81BYUns1mwZrG
    LQNMj6ctR8+3+GGxhKMEUubZOEbqTRSSwq1uzxpHHuNSwTxjaIxtsTqH5Wg5Kpd4
    ue8Xj1Z5uFjiYH6Zy5WNK81ZoA57ZHAUNOws/wDmhRhj
    Детальнее о $tools.query.add: https://a-parser.com/wiki/template-tools/#tools-query-добавление-запросов

    Оптимизация. Несмотря на то, что все вышеперечисленные способы решают одинаковую задачу, делают они это по-разному.
    • Use pages и Check next page по-умолчанию осуществляют проход по пагинации в однопоточном режиме, накапливая страницы в памяти до тех пор, пока не будет достигнут лимит или не закончатся страницы. Именно поэтому, применять регулярные выражения нужно к массиву страниц $pages. Для уменьшения потребления памяти данную логику можно переопределить с помощью опции Next page as new query. При ее активации данные функции будут каждую следующую страницу подставлять в запросы как отдельный самостоятельный запрос, тем самым не накапливая их контент в памяти. Next page as new query позволяет также определить, повышать ли уровень запроса (аналогично работе инструмента $tools.query.add), или нет.
    • Использование макросов подстановок для прохода по страницам позволяет сразу генерировать нужное кол-во запросов, поэтому такой парсинг всегда многопоточный, где каждый запрос обрабатывается в отдельном потоке.
    • $tools.query.add подставляет запросы в очередь, поэтому данный способ также позволяет "ходить" по страницам в многопоточном режиме.
    • Проход по пагинации в JS парсерах можно реализовать как в однопоточном режиме, так и в многопоточном - в зависимости от задачи. В примере JS парсера выше был рассмотрен однопоточный парсер, когда страницы "листаются" в одном потоке. Для того, чтобы сделать в JS парсере проход по пагинации многопоточным, необходимо его скомбинировать с инструментом $tools.query.add. При этом ориентироваться, что именно обрабатывается в данный момент, можно либо по уровню запроса, либо по содержимому страницы.

    Мы рассмотрели все доступные методы для реализации прохода по пагинации на страницах сайтов. У каждого метода есть свои плюсы и минусы. В большинстве случаев достаточно Check next page. При этом можно регулировать нагрузку и переключаться между однопоточным и многопоточным парсингом. На реальных примерах показаны возможности каждого метода, используя их, можно без особых проблем решать практически любые задачи, которые касаются организации парсинга с проходом по пагинации.