Jupyter-ноутбук / Скрипт на Python для исследования подкаталогов веб-сайта на основе данных XML-карты сайта. Запуск в Google Colab (если вы хотите).
Table Of Content
- Почему проверять структуру подкаталогов веб-сайта
- О выводе скрипта
- Как использовать скрипт
- 👉👉👉 Скрипт
- XML_Sitemap_+_group_by_section.ipynb в Google Colaboratory
- Редактировать описание
- Как настроить
- Примеры конфигураций:
- Тест без gzip
- Тест с gzip
- mixed
- Пример проблемы с конфигурацией:
- Парсинг XML Sitemaps на Python
- Экспорт данных из Pandas DataFrame в Google Sheets (в Google Colab)
- Почему использовать таблицу для визуализации структуры веб-сайта
Иногда SEO-специалисты ищут обзор структуры подкаталогов / разделов веб-сайта. Этот Jupyter-ноутбук может быть отправной точкой для получения списка всех подкаталогов и количества статей в каталоге.
Почему проверять структуру подкаталогов веб-сайта
Иерархически упорядоченный веб-сайт с разумной структурой является своего рода лучшей практикой SEO, которая помогает пользователям и ботам группировать контент и находить путь внутри вашего сайта. Время от времени (или если вы берете на себя новый проект), вы хотите проверить, имеет ли эта структура (по-прежнему) смысл. Если эту проверку не проводили некоторое время, ожидайте забытых / устаревших подкаталогов, которые нарушают вашу хорошую структуру веб-сайта.
Этот скрипт может помочь вам получить представление о структуре вашего сайта.
О выводе скрипта
Скрипт может сгенерировать что-то подобное на основе XML-карты сайта.
Вы получите CSV-список полных URL-адресов каждого подкаталога, пример URL-адреса внутри каталога, некоторое количество информации о том, насколько глубоко вы находитесь в иерархии, и каждый подкаталог, разделенный по уровням.
Кроме того, вы можете ожидать некоторой информации о том, сколько статей находится в подкаталоге.
Другой пример вывода: https://docs.google.com/spreadsheets/d/1SBW3rMp3OxUOWNyAn8iS2ORx2I4xFaTTFeP0M6RDi_g/edit?usp=sharing
Как использовать скрипт
Это jupyter notebook. Я добавил много комментариев ... пожалуйста, свяжитесь со мной, если что-то не работает.
Работа скрипта в значительной степени зависит от структуры вашего веб-сайта и вашей способности написать правильное регулярное выражение для вашего сайта. Я сделал его так, чтобы он работал хорошо для нескольких издателей, но веб-сайты и URL-адреса могут быть очень разными, поэтому вам, вероятно, придется адаптировать код.
👉👉👉 Скрипт
Вы можете скачать его здесь или запустить копию непосредственно в Google Colab (рекомендуется)
XML_Sitemap_+_group_by_section.ipynb в Google Colaboratory
Редактировать описание
colab.research.google.com
Как настроить
Вам нужно определить 5 вещей:
sitemaps = ['[https://www.blick.ch/video.xml','https://www.blick.ch/image.xml','https://www.blick.ch/article.xml'](https://www.blick.ch/video.xml','https://www.blick.ch/image.xml','https://www.blick.ch/article.xml')]
- Регулярное выражение для обнаружения подкаталога
pattern = '(.*?)\/' #Получить подкаталог
Для URL-адреса https://www.blick.ch/life/essen/rezept/schnelle-rezepte-so-einfach-bereiten-sie-couscous-richtig-zu-id15838923.html это может получить "life" в качестве подкаталога уровня 1, если использовать его так, как указано ниже в коде (проверьте здесь)
dfSitemap['L1'] = dfSitemap['loc'].str.extract('http[s]:\/\/.*?\/' + pattern, expand=False)
- Регулярное выражение для обнаружения полного URL-адреса подкаталога
_patternPath = '^(.*[\\\/])'_
Для URL-адреса https://www.blick.ch/life/essen/rezept/schnelle-rezepte-so-einfach-bereiten-sie-couscous-richtig-zu-id15838923.html это получает https://www.blick.ch/life/essen/rezept/ Используется следующим образом:
dfSitemap['SubdirURL'] = dfSitemap['loc'].str.extract(patternPath, expand=False)
- Название бренда для имен файлов ... (необязательно)
_brandname = 'Blick'_
- Есть переменная для тестирования. Если вы добавите, например, 5 здесь, он просто протестирует 5 подкарт подкарты индекса. 0 протестирует все карты сайта.
maxSubsitemapsToCrawl = 0
Примеры конфигураций:
Тест без gzip
sitemaps = ['https://www.spiegel.de/sitemap.xml']
pattern = '(.*?)\/'
patternPath = '^(.*[\\\/])'
brandname = 'Spiegel'
Тест с gzip
sitemaps = ['https://www.blick.ch/video.xml','https://www.blick.ch/image.xml','https://www.blick.ch/article.xml']
pattern = '(.*?)\/'
patternPath = '^(.*[\\\/])'
brandname = 'Blick'
mixed
sitemaps = ['https://www.welt.de/sitemaps/sitemap/sitemap.xml']
pattern = '(.*?)\/.*[0-9]{6,}.*?\/.*html'
patternPath = '^(.*[\\\/]).*[0-9]{6,}.*'
brandname = 'Welt'
Пример URL: https://www.welt.de/food/essen/article206809645/Kekse-backen-ohne-Mehl-Schoko-Cookies-mit-Meersalz.html
Пример проблемы с конфигурацией:
С URL, подобным https://www.welt.de/food/essen/article206809645/Kekse-backen-ohne-Mehl-Schoko-Cookies-mit-Meersalz.html, часть article206809645 на самом деле не является подкаталогом. Поэтому вам нужно использовать регулярное выражение, чтобы обнаружить и исключить их.
^(.*[\\\/])article[0-9]{6,}.*
может сделать это, чтобы получить настоящий URL подкаталога. Проверьте: https://regex101.com/r/ZZcusp/1 Жду комментариев о том, как сделать это более элегантно.
Я не пытался найти решение для https://www.theguardian.com/world/live/2020/apr/18/coronavirus-live-news-global-deaths-pass-150000-trump-china-china-denies-any-concealment-pence-origins-europe-germany, но "2020/apr/18" тоже нужно обработать...
Парсинг XML Sitemaps на Python
Внутри скрипта находится код для парсинга XML Sitemaps на Python.
Он способен обрабатывать несколько XML Sitemaps и индексных Sitemaps. Версии с gzip и без gzip. Он использует переменную "stop", чтобы не работать слишком долго во время тестирования. Основная обработка исключений.
Экспорт данных из Pandas DataFrame в Google Sheets (в Google Colab)
Я использую https://github.com/robin900/gspread-dataframe с функцией set_with_dataframe.
Почему использовать таблицу для визуализации структуры веб-сайта
В теории вы можете использовать деревянные графики или концептуальные карты, чтобы визуализировать структуру вашего веб-сайта, но если сайт не является супер маленьким, то в какой-то момент это всегда кажется запутанным.
Кроме того, если вы визуализировали структуру веб-сайта, у вас возникнут вопросы и данные для последующего анализа:
- Сколько органических посещений генерирует эта секция по сравнению с другой?
- Сколько статей находится в ней?
- ...
Если вы хотите добавить дополнительные данные, таблицы подойдут.