Получение карты сайта sitemap используя Python


Получени карты сайта sitemap на Python

Если вы заметили, то все куски скриптов, которые мы публикуем, можно при желании объединить в один и код будет более функционалный. И сегодня тоже публикуем часть кода, который можно будет со временем использовать в более большом проекте, например по анализу конкурентов.

Сегодня рассмотрим как проверить карту сайта 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, продолжение следует....всегда рады репостам и реакциям в канале.