Теперь даже мой кот сможет вытащить большое количество урлов из нескольких xml карт сайта

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

Ну а зачем тратить час на ручную работу, если можно потратить 2 часа на то, чтобы это автоматизировать, правда? Сказал бы я вот так и потратил бы на это часа три, а то и четыре. Но слава нейросетям, помогают сократить это время до минимума.

Суть задачи - надо вытащить урлы из xml карты сайта, но карта разбита на несколько мелких карт по 1000 урлов, соответственно это осложняет процесс загрузки этих урлов.

Резонный вопрос, а на кой ляд тебе понадобились эти урлы? Для того, чтобы отправить их на индексацию через Google Indexing API, как я это называю - принудительная отправка на индексацию большого массива.

Можно пойти простым путем, открывать каждый урл руками, сохранять его как xml на своем компьютере, далее собрать их все в одну папку и открыть принудительно все скопом через Power Query (кто не знает. что есть такая офигенная штука у Гугл таблиц - с добрым утром, рекомендую погуглить).

Но открыть 100 ссылок руками - ну такое, правда? Поэтому, за 1 минуту был сгенерирован скрипт на Питоне, которые решил задачу за 1,5 минуты. Мне не понадобилось много времени, скрипт заработал со второго раза, поэтому я делюсь им с вами, может кому будет полезен.

Настройка

Для начала необходимо установить на свой компьютер необходимые для работы модули, для чего надо открыть командную строку

Для Винды

Открытие через диалоговое окно "Выполнить":

  • Нажмите комбинацию клавиш Win + R для открытия диалогового окна "Выполнить".
  • Введите cmd и нажмите Enter.

Для Мака

Открытие через Spotlight:

  • Нажмите комбинацию клавиш Cmd + Space, чтобы открыть Spotlight.
  • Введите Terminal и нажмите Enter.

В командной строке выполните следующие команды

pip install requests pip install beautifulsoup4

Если эти пакеты у вас установлены, проверьте обновление

pip install --upgrade requests pip install --upgrade beautifulsoup4

После этого создайте папку где у вас будет лежать наш скрипт и создайте там файл с разрешением .py. В моем случае это файл - script.py.

Откройте скрипт через текстовый редактор (я использую notepad++) и добавьте в файл этот код.

import requests from bs4 import BeautifulSoup # Функция для загрузки и парсинга карты сайта с заголовками def fetch_sitemap_urls(sitemap_url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Accept-Language': 'en-US,en;q=0.9', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', } try: response = requests.get(sitemap_url, headers=headers) response.raise_for_status() # Проверка статуса HTTP soup = BeautifulSoup(response.content, 'xml') urls = [loc.text for loc in soup.find_all('loc')] if not urls: print(f"Не удалось найти URL в {sitemap_url}") return urls except requests.exceptions.RequestException as e: print(f"Ошибка при загрузке {sitemap_url}: {e}") return [] # Список URL-адресов карт сайта sitemap_urls = [ 'https://site.com/sitemap2.xml', 'https://site.com/sitemap1.xml', # Добавьте сюда дополнительные URL-адреса карт сайта ] # Массив для хранения всех URL all_urls = [] # Обработка каждой карты сайта for sitemap_url in sitemap_urls: print(f"Загрузка {sitemap_url}") urls = fetch_sitemap_urls(sitemap_url) all_urls.extend(urls) # Сохранение всех URL в файл with open('all_urls.txt', 'w') as file: for url in all_urls: file.write(url + '\n') print(f"Все URL успешно загружены и сохранены в all_urls.txt. Всего URL: {len(all_urls)}")

Обязательно замените на свои УРЛы после 28-29 строки.

Запускаете скрипт там же, в командной строке. Переходите в вашу папку, где лежит скрипт

cd d:/script

Далее запускаете скрипт такой командой

python script.py

Все урлы будут сохранены в этой же папке в файле result

Удачной автоматизации!

3 комментария

а можно спарсить через screaming frog и не городить фигню

1
Ответить

Помню, надо было урвать освобождающийся домен, но без фанатизма, без помощи брокеров и перехватчиков. Так я смонстрячил быстрый скрипт, что парсил whois и в случае возможности покупки начинал орать мне в телегу.

Когда домен освободился, он конечно не сработал, как задумывалось, но к счастью возможность ошибки я тоже предусмотрел)) Так я ещё не говнокодил, имхо.

1
Ответить

Power Query это в эксельке, макросовтовская приблуда, в гуглотаблицах там другое и по другому называется просто QUERY. Штука мощная, но надо вникать в документацию. Ты мог это сделать и с помощью неё и с помощью PWR QWERY, без проблем, просто в два запроса, первый вынимает урлы из первой эксемельки, второй проходит по ним и вынимает тебе нужное. PWR QWERY в винде нативно умеет вынимать данные из xml в табличку. По моему на маке оно сейчас тоже есть в XL.
Делается это тоже быстро, если конечно знаешь как.
Но да пофиг. Быстрое решение, есть быстрое решение. Питон понятнее и удобнее.
Чатгпт рулит, а джуны идут работать курьерами, как всегда...

1
Ответить