Использование Pandas для создания динамической карты сайта

Использование Pandas для создания динамической карты сайта

5 мая 2022 г.

Представьте, что вы находитесь в здании, в каждой комнате есть разные предметы, которые нужно показать посетителю. Как вы сообщаете посетителю, какую комнату посетить? Да, вам нужна карта. Это относится и к вашему веб-сайту, чтобы поисковые системы, такие как Google и Bing, знали, что такое контент на вашем веб-сайте, вам нужна хорошая карта сайта в формате XML.


Карта сайта XML — это файл, который действует как дорожная карта вашего веб-сайта, которая ведет Google ко всем вашим важным страницам. [1] Таким образом, для маркетолога, работающего на основе данных, это важный инструмент поисковой оптимизации (SEO), который позволяет размещать страницы вашего веб-сайта в основных поисковых системах.


Основная структура карты сайта


Согласно Google [2], очень простая XML-карта сайта, которая включает расположение одного URL-адреса, выглядит следующим образом:


```разметка




<ссылка>


http://www.example.com/foo.html


2018-06-04




Формат протокола Sitemap состоит из тегов XML. Все значения данных в файле Sitemap должны быть экранированы сущностью. Сам файл должен быть в кодировке UTF-8.


Карта сайта должна:


  • Начните с открывающего тега и закончите закрывающим тегом .

  • Укажите пространство имен (стандартный протокол) в теге .

  • Включите запись для каждого URL-адреса в качестве родительского тега XML.

  • Включите дочернюю запись для каждого родительского тега .

Все остальные теги необязательны. Поддержка этих необязательных тегов может варьироваться в зависимости от поисковых систем. Кроме того, все URL-адреса в файле Sitemap должны быть с одного хоста, например www.example.com или store.example.com. .com). [3]


Проблема статической карты сайта


Недавно я работал над одним из своих проектов — AIPharm. Он отображает ежедневно обновляемые фармацевтические данные. Данные постоянно обновляются и ежедневно добавляются новые страницы. Без новой карты сайта Google потребуется несколько месяцев, чтобы обнаружить новые страницы. Решение проблемы — динамическая карта сайта.


Почему панды?


Проблема статической карты сайта привела меня к поиску решения динамической генерации карты сайта, и я нашел самое простое доступное решение: Pandas!


В последней версии (Pandas 1.4 и выше) карта сайта может быть легко сгенерирована из фрейма данных. Среди других преимуществ использования панд:


  • Простое управление страницами

  • Подходит для Python

  • Требуется несколько строк кода

Давайте начнем наше кодирование сейчас 💪


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


Необходимый пакет:


По умолчанию большинство пользователей Python уже установили pandas в своей среде. Важно проверить версию pandas перед началом кодирования.


```питон


pd.версия


Убедитесь, что версия вашей панды выше 1.4.0


Обновите свои панды, если они ниже 1.4.0:


``` ударить


pip install --upgrade pandas == 1.4.1


Импортируйте необходимые пакеты и приступайте к кодированию:


```питон


импортировать панд как pd


импортировать numpy как np


запросы на импорт


с даты и времени


импорт даты и времени


импортировать urllib.parse


импортировать повторно


сейчас = дата/время.сейчас()


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


```питон


r = request.get("https://reqres.in/api/products") j = r.json()["data"] df = pd.DataFrame.from_dict(j)


Создать динамический список элементов


Здесь я использую URL-адрес https://example.xyz/ в качестве префикса URL-адреса. Я хотел бы сделать шаблон https://example.xyz/product//. Поскольку продукт обновляется ежемесячно, я поставлю приоритет 0,6 и изменение ежемесячно.


```питон


def returnURL (имя, идентификатор, тип):


шаблон = перекомпилировать (r"[^\w\s]")


url_name = pattern.sub("", имя)


печать (url_name)


url_name = url_name.lower().replace(" ","-")


url = "https://example.xyz/"+type+"/"+str(id)+"/"+urllib.parse.quote(url_name)


обратный URL


df["loc"] = df.apply(лямбда x: returnURL(x["name"],x["id"],"products"), axis=1)


df["lastmod"] = now.strftime("%Y-%m-%d")


df["changefreq"] = "ежемесячно"


df["приоритет"] = 0,6


df = df.reindex(columns=["loc","lastmod","changefreq","priority"])


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


Создание статических страниц


Создайте фрейм данных с 4 столбцами «loc», «lastmod», «changefreq», «priority», затем добавьте все данные в фрейм данных.


```питон


df_main = pd.DataFrame (столбцы = ["loc", "lastmod", "changefreq", "priority"], данные = [])


df_main = df_main.append(pd.DataFrame(columns=["loc","lastmod","changefreq","priority"], data=[["https://example.xyz",now.strftime("% Y-%m-%d"),"ежедневно",1.0]]))


array_list = ["страница1","страница2","страница3"]


для я в array_list:


df_main = df_main.append(pd.DataFrame(columns=["loc","lastmod","changefreq","priority"], data=[["https://example.xyz/"+i,now.strftime ("%Y-%m-%d"),"ежедневно",1.0]]))


Объединить оба списка


Когда у вас есть оба списка, объедините их, чтобы получить окончательную таблицу df_final. Не забудьте удалить индекс, чтобы он соответствовал нужному формату.


```питон


df_final = df_main.append(df)


df_final = df_final.reset_index(drop=Истина)


Публикация 🎉


Суть всей статьи здесь! просто используйте метод dataframe.to_xml для экспорта фрейма данных в виде карты сайта. Используйте настройку ниже, чтобы соответствовать протоколу карты сайта:


```питон


df_final.to_xml("sitemap.xml",


индекс=ложь,


root_name = 'набор URL-адресов',


row_name='URL',


пространства имен= {"": "http://www.sitemaps.org/schemas/sitemap/0.9"})


Примечание. Убедитесь, что вы проверяете свою карту сайта при ее создании в первый раз с помощью онлайн-валидатора карты сайта


Бонус: загрузка на Github


Чтобы загрузить в GitHub, вы можете использовать пакет pygithub и просто использовать код ниже:


```питон


из github импортировать Github


использование токена доступа


г = Гитхаб ("ХХХХХХХ")


репо = g.get_repo("xxxx/medium_article")


с open('sitemap.xml', 'r') в виде файла:


содержимое = файл.чтение()


содержимое = repo.get_contents("public/sitemap.xml")


repo.update_file("public/sitemap.xml", "обновить карту сайта", content,contents.sha, branch="main")


Этот код загрузит карту сайта в нужный репозиторий Github, и новая карта сайта будет доступна для Google после восстановления веб-сайта.


Код этой статьи доступен здесь


Как разработчик интерфейса React и любитель данных, я обнаружил, что этот способ проще использовать pandas для создания карты сайта. Во-первых, это позволяет мне иметь отдельный конвейер для создания карты сайта, и я могу контролировать, когда мне нужно создать карту сайта, мне не нужно намеренно нажимать что-то ненужное, и я могу настроить задачи cron для создания карты сайта.


Во-вторых, этот метод легче настроить по сравнению с другими методами, доступными в Интернете, такими как метод javascript, который генерируется при сборке, или другие методы python, требующие нескольких шагов. Это дает мне полный контроль над тем, что нужно генерировать и включать в карту сайта, а также возможность создавать более сложную карту сайта в будущем.


Наконец, я хотел бы поблагодарить вас за чтение моей статьи


Эта статья была впервые опубликована [здесь] (https://levelup.gitconnected.com/dynamic-sitemap-generation-with-pandas-c78899600796)


Рекомендации:


[1] Yoast SEO


[2] https://developers.google.com/search/docs/advanced/sitemaps/build-sitemap


[3] https://www.sitemaps.org/protocol.html



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE