Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСбор данных

Постраничная навигация: обход без потерь

ostrov
ostrov
Участник
сообщений 505
с окт
1 мая, 08:52первое сообщение

Обхожу каталог поставщика постранично: 640 страниц по 48 карточек, прогон идёт часа полтора.

Сверил две ночи подряд и схватился за голову. Полторы сотни карточек попали в выгрузку дважды, при этом штук восемьдесят вчерашних сегодня пропали, хотя на сайте они спокойно лежат.

Каталог живой, товары добавляют в течение дня. Похоже, дело в этом. Как правильно обходить такое?

dobrynin_a
dobrynin_a
Знаток
сообщений 1690
с апр
8 октября, 11:09#2

Дело ровно в этом. Пока вы идёте с сороковой страницы на сорок первую, сверху вставляют десяток товаров, лента съезжает вниз, и часть карточек с сорок первой уезжает обратно на сороковую. Вы её уже прошли, вот вам дубли. С хвостом истории зеркальные: карточки перепрыгивают через границу вперёд и не попадают в выгрузку вообще.

Первое, что надо сделать: сменить сортировку на неизменное поле по возрастанию. Дата добавления от старых к новым, идентификатор по возрастанию, что найдётся. Тогда свежие товары приезжают в хвост и на пройденные страницы уже не влияют.

Лена Соболева
Лена Соболева
Участник
сообщений 385
с дек
15 марта, 14:26#3

а если в фильтрах только «популярные» и «сначала новые»? у меня выбора нет

proxy_hands
proxy_hands
Знаток
сообщений 1405
с мая
22 августа, 17:43#4

Смотрите на адрес страницы, там рычагов обычно больше, чем в видимом меню. Пара sort=id&order=asc работает даже на сайтах, где такого пункта нигде нет.

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

ostrov
ostrov
Участник
сообщений 505
с окт
1 января, 08:00#5
dobrynin_a: сменить сортировку на неизменное поле по возрастанию

Подобрал, sort=created&order=asc сайт понимает, хотя в меню такого пункта нет. Дубли упали с полутора сотен до девяти.

Девять всё равно откуда-то берутся.

batchrunner
batchrunner
Участник
сообщений 470
с окт
8 июня, 11:17#6

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

Дальше про пропуски, они опаснее дублей, потому что молчат. Ловятся сверкой двух множеств: ключи вчера и ключи сегодня. Разница в обе стороны сразу показывает, что ушло и что пришло. Если ушедших внезапно сотня, значит прогон оборвался или сайт подсунул повтор.

И третье, про потолок глубины. Многие каталоги отдают ограниченное число страниц, дальше начинают крутить одно и то же. Проверяется за минуту: просите страницу 300, потом 301, сравниваете первый ключ на каждой. Совпал, значит вы упёрлись в потолок и весь хвост каталога вам просто не показывают. Тогда резать на куски придётся в любом случае, сортировка тут уже бессильна.

карточек в выгрузке по прогонам
карточек в выгрузке по прогонам
proxy_hands
proxy_hands
Знаток
сообщений 1405
с мая
15 ноября, 14:34#7

Ещё одна причина повторов на глубине, раз тема про потери. Когда обход идёт быстро и подряд с одного адреса, часть каталогов на четвёртой сотне страниц начинает отдавать закешированную первую страницу вместо запрошенной. Снаружи это выглядит как дубли, хотя разбор тут ни при чём.

Длинные обходы я гоняю через приватные адреса под задачи парсинга, ротация внутри пула идёт сама, и подмена первой страницы у меня пропала. Заодно ушли пустые ответы ближе к концу списка.

Егор Пастухов
Егор Пастухов
Новичок
сообщений 78
с июл, второй сезон
22 апреля, 17:51#8

а множество ключей на 30 тысяч карточек в памяти не тяжело? у меня машина слабая

batchrunner
batchrunner
Участник
сообщений 470
с окт
1 сентября, 08:08#9

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

ostrov
ostrov
Участник
сообщений 505
с окт
8 февраля, 11:25#10

Собрал всё вместе и прогнал ночью. Сортировка по дате добавления, дедуп по идентификатору из ссылки, каталог порезан по разделам, самый жирный раздел ещё и по производителям.

Дублей ноль. По сверке со вчерашним пропало три карточки, все три правда сняты с продажи.

Спасибо, разобрались.

dobrynin_a
dobrynin_a
Знаток
сообщений 1690
с апр
15 июля, 14:42#11

Сверку между прогонами оставьте себе навсегда. Она первой скажет, что на сайте поменяли разметку.