Иногда вам может понадобится список URL — адресов всех постов, страниц и категории вашего WordPress или WooCommerce сайта.
Bash Script — Создание списка URL — адресов из карты сайта в WordPress
Обновить все пакеты и установить пакет xml2 на Debian и Ubuntu
sudo apt update sudo apt install wget xml2 -y
После установки основных инструментов, вы можете перейти к скрипту.
Основной скрайбер карты сайта
Этот скрипт обрабатывает ваш post-sitemap.xml и page-sitemap.xml
#!/usr/bin/env bash # Purpose: WordPress URL sitemap scraper # Author: AndreyEx # Source: AndreyEx https://andreyex.ru # Сайт для извлечения файлов SITE=https://andreyex.ru # Извлечение post-sitemap.xml wget -q $SITE/post-sitemap.xml -O postsitemap.xml #Разобрать xml файл и сохранить его в posts.txt xml2 < postsitemap.xml | grep /url/loc= | sed 's/.*=//' > posts.txt #Скачать страницу карты сайта wget -q $SITE/page-sitemap.xml -O pagesitemap.xml #разобрать xml сайт и сохранить его в pages.txt xml2 < pagesitemap.xml | grep /url/loc= | sed 's/.*=//' > pages.txt
У вас появятся 2 файла: posts.txt и pages.txt.
Множественный Sitemaps
Если у вас есть несколько файлов карт сайта в формате post-sitemap1.xml, этот скрипт поможет извлечь все URL-адреса из каждого суб-файла.
Вы должны предоставить номера от 1..6
#!/usr/bin/env bash # WordPress URL sitemap scraper for multiple post-sitemaps # Author AndreyEx from AndreyEx https://andreyex.ru # Сайт для извлечения файлов SITE=https://andreyex.ru # для нескольких файлов, в данном случае 6 for i in {1..6} do wget -q $SITE/post-sitemap$i.xml -O postsitemap.xml #Парсинг xml файла из posts-$i.txt xml2 < postsitemap.xml | grep /url/loc= | sed 's/.*=//' > posts-$i.txt done
Если вы хотите совместить (объединить) несколько файлов: posts-1.txt, posts-2.txt, posts-n.txt в allposts.txt, это можно сделать так
cat posts-*.txt > allposts.txt
Вы также можете использовать sed вместо того, чтобы объединить файлы в один
sed -n w"allposts.txt" posts-{1..6}.txt
Конвертировать все файлы Sitemap
Это соединит все карты сайта в текстовый файл, независимо от того, сколько у вас sitemaps есть.
#!/usr/bin/env bash # Purpose: WordPress URL sitemap scraper # Author: AndreyEx # Source: AndreyEx https:/andreyex.ru # Сайт SITEMAPBASE=https://andreyex.ru # Имя главной карты сайта SITEMAPXML=sitemap_index.xml # Грабинг sitemap.xml wget -q $SITEMAPBASE/$SITEMAPXML -O /tmp/sitemap.xml # включение карты сайта в множество sub-sitemaps SITEMAPARRAY=($(xml2 < /tmp/sitemap.xml | grep /sitemapindex/sitemap/loc= | sed 's#.*=##')) # цикл по масиву, захватить sub-sitemap и превратить его в текстовый файл for SITEMAPELEMENT in ${SITEMAPARRAY[@]}; do echo $SITEMAPELEMENT wget -q $SITEMAPELEMENT -O /tmp/tempsitemap.xml SITEMAPTXTNAME=$(echo $SITEMAPELEMENT | sed "s#$SITEMAPBASE/##" | sed "s#.xml##") echo $SITEMAPTXTNAME xml2 < /tmp/tempsitemap.xml | grep /url/loc= | sed 's/.*=//' > $SITEMAPTXTNAME.txt done
Если вы хотите совместить (объединить) несколько файлов: posts-sitemap1.txt, posts-sitemap2.txt, postssitemap-n.txt в allposts.txt, это можно сделать так
cat post-sitemap*.txt > allposts.txt
Теперь у вас есть список постов, страниц, категорий из карты сайта.