Создать Sitemap.XML в Python
Большинство CMS в наши дни имеют собственные инструменты для создания карты сайта. Но, что делать если нам нужен инструмент который создавал sitemap.xml для определенного сайта не имея доступа к базе данных. Для этого нужно воспользоваться небольшим парсером который посетит все публичные ссылки на нужном сайте и составит его карту.
Карта сайта весьма нужный файл на вашем сайте. Такие поисковые системы как Google и Яндекс отдают предпочтение сайтам с уже готовым sitemap. Поисковики понимают какие страницы для вас важнее и какие обновляются чаще и нуждаются в особом внимании. Кодировка файла sitemap.xml должна быть utf-8.
Структура файла Sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://python-3.ru/</loc>
<lastmod>2015-07-25</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://python-3.ru/category/pyqt/</loc>
<lastmod>2015-07-25</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
Описание тегов
<urlset> (обязательный) - Инкапсулирует этот файл и указывает стандарт текущего протокола.
<url> (обязательный) - главный тег каждой ссылки. Теги внутри него являются дочериными и описывают каждую ссылку индивидуально.
<loc> (обязательный) - URL-адрес страницы. Этот URL-адрес должен начинаться с префикса (например, HTTP) и заканчиваться косой чертой, если Ваш веб-сервер требует этого. Длина этого значения не должна превышать 2048 символов.
<lastmod> (необязательно) - Дата последнего изменения файла. Эта дата должна быть в формате W3C Datetime. Этот формат позволяет при необходимости опустить сегмент времени и использовать формат ГГГГ-ММ-ДД.
<changefreq> (необязательно) - Вероятная частота изменения этой страницы. Это значение предоставляет общую информацию для поисковых систем и может не соответствовать точно частоте сканирования этой страницы. Допустимые значения: always (всегда), hourly (каждый час), daily (каждый день), weekly (каждую неделю), monthly (каждый месяц), yearly (каждый год), never (никогда).
<priority> (необязательно) - Приоритетность URL относительно других URL на Вашем сайте. Допустимый диапазон значений — от 0,0 до 1,0. Это значение не влияет на процедуру сравнения Ваших страниц со страницами на других сайтах — оно только позволяет указать поисковым системам, какие страницы, по Вашему мнению, более важны для сканеров. Приоритет страницы по умолчанию — 0,5.
Скрипт создания Sitemap.xml в Python
Для этого мы будем использовать модуль ApeSmit который является весьма элегантной и легкой решением для создание sitemap.xml. Хочу напомнить, что ApeSmit не является парсером, т.е. он заходит на сайт и не создает древо автоматически. Он создает sitemap.xml из тех ссылок что вы ему предложите.
Установка
easy_install apesmit
Код на Python
# -*- coding: utf-8 -*-
from apesmit import Sitemap
# Ставим значение частоты изменении для всех ссылок
sm = Sitemap(changefreq='weekly')
# Добавляем обычную сссылку, указываем индивидульно приоритет
sm.add('http://python-3.ru/', priority=1.0)
# Добавляем ссылку с измененым параметром последнего изменения
sm.add('http://python-3.ru/page/send-sms-python', lastmod='today')
sm.add('http://python-3.ru/category/sqlite', changefreq='daily', priority=1.0, lastmod='2015-07-23')
# Создаем файл sitemap в текущею папку скрипта
out=open('sitemap.xml', 'w')
# записываем данные
sm.write(out)
# закрываем файл
out.close()
Результат работы скрипта
<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://python-3.ru/</loc>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://python-3.ru/page/send-sms-python</loc>
<lastmod>2015-07-25</lastmod>
<changefreq>weekly</changefreq>
</url>
<url>
<loc>http://python-3.ru/category/sqlite</loc>
<lastmod>2015-07-23</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
</urlset>