Использование Pandas для создания динамической карты сайта
5 мая 2022 г.Представьте, что вы находитесь в здании, в каждой комнате есть разные предметы, которые нужно показать посетителю. Как вы сообщаете посетителю, какую комнату посетить? Да, вам нужна карта. Это относится и к вашему веб-сайту, чтобы поисковые системы, такие как Google и Bing, знали, что такое контент на вашем веб-сайте, вам нужна хорошая карта сайта в формате XML.
Карта сайта XML — это файл, который действует как дорожная карта вашего веб-сайта, которая ведет Google ко всем вашим важным страницам. [1] Таким образом, для маркетолога, работающего на основе данных, это важный инструмент поисковой оптимизации (SEO), который позволяет размещать страницы вашего веб-сайта в основных поисковых системах.
Основная структура карты сайта
Согласно Google [2], очень простая XML-карта сайта, которая включает расположение одного URL-адреса, выглядит следующим образом:
```разметка
<ссылка>
Формат протокола 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/
```питон
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
Оригинал