Дмитрий Гапонов › Nautisss
Сайты руками, боты и парсеры на Python, чертежи в AutoCAD
Рейтинг
5 442
№ 268 в каталоге
Отзывы
Профессионализм
10/10
Коммуникация
10 /10
На сайте с
2025 года
Юридический статус
Самозанятый

Генератор товарных выгрузок и карты сайта для магазина на 800 тысяч позиций - 22 секунды вместо девяти часов

Описание

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

Причина, по которой всё это не обновлялось, оказалась не в лени владельца. Штатный модуль выгрузки собирал восемь тысяч товаров за 184 секунды, то есть на полный каталог ему нужно около девяти часов - он строил адрес каждого товара отдельным запросом. Такой прогон по ночам не встанет ни на какое расписание, и обновление держалось на ручном запуске, последний раз в июне.

Решение

Отказался от штатного модуля и написал свой выгрузчик прямым запросом к базе - весь каталог за 22 секунды и два мегабайта памяти.

Формулу адреса товара выяснил по коду модуля человекопонятных адресов и проверил на живых страницах. Адрес складывается из ключей всех родительских категорий и ключа товара с постфиксом, а главная категория выбирается тем же правилом, что внутри самого модуля. Шестьдесят шесть случайных адресов и картинок из готовых файлов проверил запросами, все ответили 200.

В выгрузку заложил адрес, цену, валюту, категорию, оригинал картинки из папки изображений, самовывоз и доставку, название, производителя, описание с вырезанными тегами и обрезкой, признак наличия. Габаритов и веса в базе нет ни у одного товара, поэтому теги не выводятся вовсе - раньше там лежал мусор вида 0E-8.

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

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

Уборка за собой вскрыла две дыры. Файл рядом со скриптом спокойно скачивался снаружи, хотя папка закрыта правилами - веб-сервер отдаёт статику мимо обработчика этих правил. И заливка по FTP сама кладёт рядом копию прежней версии, а для веб-сервера это обычная статика, то есть исходник скрипта с ключами доступа отдавался кому угодно. Обе закрыл переименованием, промежуточные папки сборки убрал из корня сайта.

Результат

Двадцать две выгрузки и двадцать две карты сайта плюс индекс. В выгрузках 431 302 предложения только в наличии против миллиона с лишним мёртвых строк, в карте 801 028 адресов нынешнего вида. Всё встало на ночное расписание, дата в файлах теперь всегда свежая. Проверку перед сдачей гонял внешними запросами и запускал самой строкой расписания, чтобы проверялось ровно то, что работает. Прежние файлы целиком уехали в резервную папку - 45 файлов и 1,7 ГБ, ничего не удалено.

Оценили проект:

Другие проекты

Все проекты →
Веб-разработка и IT Чат-бот для трёх аккаунтов на доске объявлений - собирает заявку в переписке и отдаёт менеджеру карточкой
Чат-бот для трёх аккаунтов на доске объявлений - собирает заявку в переписке и отдаёт менеджеру карточкой
8
Инженерия и Проектирование Раздел КР жилого дома: свайное поле с ростверками, кровля, стройгенплан и календарный график
Раздел КР жилого дома: свайное поле с ростверками, кровля, стройгенплан и календарный график
8
Веб-разработка и IT База 1500 заведений США и Европы с проверенными почтами для B2B-рассылки
База 1500 заведений США и Европы с проверенными почтами для B2B-рассылки
7
Веб-разработка и IT Лендинг походного клуба: маршруты по Кавказу, Алтаю и Камчатке с подбором группы под человека
Лендинг походного клуба: маршруты по Кавказу, Алтаю и Камчатке с подбором группы под человека
6