Если вы заметили, то все куски скриптов, которые мы публикуем, можно при желании объединить в один и код будет более функционалный. И сегодня тоже публикуем часть кода, который можно будет со временем использовать в более большом проекте, например по анализу конкурентов.
Сегодня рассмотрим как проверить карту сайта sitemap, отсканировать ее и получить все страницы, которые в ней находятся. Важно понимать, что у некоторых сайтов нет карты сайта и этот скрипт не сможет ничего сделать и второй момент - не все страницы сайта могут быть в карте, в таком случае вы получите лишь те что заведены в карту.
Для этих целей уже разработана библиотека, которую мы и будем использовать - это Ultimate Sitemap Parser. Устанавливаем библиотеку - pip install ultimate-sitemap-parser. Важно помнить, что мы используем Python 3.6+
После установки библиотеки, нам необходимо ее импортировать:
from usp.tree import sitemap_tree_for_homepage
Создадим переменную в которой передадим доменное имя:
full_domain = "https://4python.pythonanywhere.com/"
Теперь приступим к написанию самого скрипта. Создадим функцию для сканирования карты и передадим в него доменное имя:
def get_pages_from_sitemap(full_domain):
Создаем пустой список, в который мы сохраним все url из карты сайта:
list_pages = []
Присваиваем переменной tree функцию из импортированной библиотеки, которая и будет сканировать sitemap, а затем с помощью цикла получаем все страницы и добавляем их в ниш список и возвращаем список:
tree = sitemap_tree_for_homepage(full_domain)
for page in tree.all_pages():
list_pages.append(page.url)
return list_pages
Тут стоит учесть один нюанс, часто в карте сайта могут попадаться дубли, поэтому, чтобы удостовериться, что у нас уникальные url страниц, создадим функцию, которая будет проверять уникальность и передадим в нее list_pages, которые нам вернула предыдущая функция:
def get_unique_list_pages(list_pages):
Создадим пустой список, в который будем сохранять уникальные url:
unique_list_pages = []
Циклом обойдем все url в list_pages и запишем в unique_list_pages при условии, что там еще такого url нет, если же есть, просто пропустим данную итерацию.:
for page in list_pages:
if page in unique_list_pages:
pass
else:
unique_list_pages.append(page)
И теперь вернем наш список и тем самым получим уникальные url
return unique_list_pages
Весь код:
from usp.tree import sitemap_tree_for_homepage
def get_pages_from_sitemap(full_domain):
list_pages = []
tree = sitemap_tree_for_homepage(full_domain)
for page in tree.all_pages():
list_pages.append(page.url)
return list_pages
def get_unique_list_pages(list_pages):
unique_list_pages = []
for page in list_pages:
if page in unique_list_pages:
pass
else:
unique_list_pages.append(page)
return unique_list_pages
Не забудьте подписаться на наш телеграм канал@py4seo, продолжение следует....всегда рады репостам и реакциям в канале.