Эффективное создание файлов Sitemap для моделей Django

Я обычно пишу мало про практическое программирование потому как не так часто им давно уже занимаюсь,  но некоторые трюки и подходы могут быть полезны особенно тем кто программирует на Python и Django.

Например, в публичном репозитарии Поискуна теперь доступен Django sitemap generator скрипт по генерации файлов sitemap включая индексы sitemap’ов для большого числа элементов до 500 000 и более. В скрипте задаётся информация о моделях, правилах формирования ссылок и размере «нарезки» числа ссылок в одном сайтмапе — остальное он генерит автоматически. 

Собственно хотя и в Django есть собстенный генератор Sitemap’ов, для моделей для которых постоянно добавляются новые объекты и общее число их превосходит 10 000, встроенных механизм sitemap’ов неудобен, а в крупных проектах число экспортируемых ссылок может доходить до миллионов.

About This Author

  • http://webnewage.org/ Александр Кошелев

    А чем встроенный механизм неудобен? Расскажите пожалуйста поподробней.

  • http://ivan.begtin.name ivbeg

    У поисковых систем есть ограничения на размеры файлов сайтмапов и число ссылок в этих файлах. Например, Google поддерживает не более 50 000 в одном файле сайтмап. А также есть ограчение на общее число файлов сайтмапов которые можно отдать поисковой системе.

    Собственно проблема во встроенном механизме в том что он всего этого не учитывает и не умеет нарезать ссылки по моделям кусками, а также создавать их по запросу для кеширования на файловой системе, а не на лету каждый раз.
    Например, в Еноте Поискуне есть модели которые создают до 2 миллионов ссылок и встроенный движок Django просто неспособен создать файлы сайтмапов которые потом будут обработаны поисковиками без ошибок.
    Отсюда и подход по ежедневному ночному их обновлению в строго заданное время и с учётом особенностей поисковиков.

  • suvit

    вот тут
    http://trac.enotpoiskun.ru/browser/django-sitemap-gen/sitemap_gen.py#L125
    принт надо закомментировать.

  • http://ivan.begtin.name ivbeg

    2suvit: Согласен, выложил новую версию

  • http://webnewage.org/ Александр Кошелев

    Откровенно говоря, не очень вас понимаю.

    Вот смотрю код стандартного `contrib.sitemaps`. Там есть и паджинация по 50тыс. и генерация индексного файла.

    Бенефиты, кроме возможно кеширования, вашего решения как-то теряются. Да и кеширование прикрутить к стандарному тоже труда не составит.

  • http://ivan.begtin.name ivbeg

    При большом числе объектов, а у меня их несколько миллионов и возможность генерации сайтмапов по cron’овской задаче, а не в тот момент когда файл протухнет в кеше — это основное и ключевое удобство.
    Если у Вас урлов объектов и урлов к ним немного то contrib.sitemaps хватит с головой — а если пойдут сотни тысяч, то и сами обратите внимание на то что поисковики начнут сыпать ошибками.

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

  • http://webnewage.org/ Александр Кошелев

    Понятно. Да, надо будет попробовать.

Яндекс.Метрика