Массовое вытаскивание урлов из нескольких 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
Удачной автоматизации!