KOMPX.COM or COMPMISCELLANEA.COM   

Браузер lynx. Создание sitemap.xml

Существует немало онлайн сервисов для создания sitemap.xml. Однако его можно сделать и самому на своем компьютере, используя браузер lynx и несколько утилит командной строки Linux. Далее описывается пример использующего их bash-скрипта, названного sitemap.sh.

Bash-скрипт, который создает файл sitemap.xml:


#!/bin/bash
cd /home/me/sitemap/www/
lynx -crawl -traversal -accept_all_cookies -connect_timeout=30 http://www.compmiscellanea.com/ > /dev/null
cd /home/me/sitemap/www2/
lynx -crawl -traversal -accept_all_cookies -connect_timeout=30 http://compmiscellanea.com/ > /dev/null
cat /home/me/sitemap/www2/traverse.dat >> /home/me/sitemap/www/traverse.dat
cat /home/me/sitemap/www/traverse.dat | sed -e 's/\<www\>\.//g' | sort | uniq > /home/me/sitemap/sitemap/sitemap.xml
sed -i 's/\&/\&amp\;/g' /home/me/sitemap/sitemap/sitemap.xml
sed -i "s/'/\&apos\;/g" /home/me/sitemap/sitemap/sitemap.xml
sed -i 's/"/\&quot\;/g' /home/me/sitemap/sitemap/sitemap.xml
sed -i 's/>/\&gt\;/g' /home/me/sitemap/sitemap/sitemap.xml
sed -i 's/</\&lt\;/g' /home/me/sitemap/sitemap/sitemap.xml
sed -i 's/http:\/\//http:\/\/www\./g' /home/me/sitemap/sitemap/sitemap.xml
sed -i -e 's/^/<url><loc>/' /home/me/sitemap/sitemap/sitemap.xml
sed -i -e 's/$/<\/loc><\/url>/' /home/me/sitemap/sitemap/sitemap.xml
sed -i -e '1 i <?xml version="1\.0" encoding="UTF-8"?>\r\r<urlset xmlns="http:\/\/www\.sitemaps\.org\/schemas\/sitemap\/0\.9" xmlns:xsi="http:\/\/www\.w3\.org\/2001\/XMLSchema-instance" xsi:schemaLocation="http:\/\/www\.sitemaps\.org\/schemas\/sitemap\/0\.9 http:\/\/www\.sitemaps\.org\/schemas\/sitemap\/0\.9\/sitemap\.xsd">\r\r<!-- created by sitemap.sh from http:\/\/www.compmiscellanea.com\/en\/lynx-browser-creating-sitemap.xml\.htm -->\r\r' /home/me/sitemap/sitemap/sitemap.xml
sed -i -e '$ a \\r</urlset>' /home/me/sitemap/sitemap/sitemap.xml
sed -i '/static/d' /home/me/sitemap/sitemap/sitemap.xml
echo "...Done"

После того, как файл с bash-скриптом готов: chmod +x sitemap.sh, что бы сделать его исполняемым.

Скачать sitemap.sh в архиве sitemap.sh.tar.gz. После того, как архив загружен и распакован, в файле заменить http://www.compmiscellanea.com/ на нужное доменное имя сайта с "www" и заменить http://compmiscellanea.com/ на нужное доменное имя сайта без "www". Вместо "static" в последней строке файла поставить строку, которую должны содержать ссылки, что бы они были удалены из списка. Затем chmod +x sitemap.sh. Затем запустить sitemap.sh.

Комментарии

Скачать sitemap2.sh с построчными комментариями в архиве sitemap2.sh.tar.gz.

Перед тем, как запустить bash-скрипт, нужно создать три папки. Так как браузер lynx в каких-то случаях может пропустить некоторые ссылки, если доменное имя сайта будет указано с или без "www", то bash-скрипт запускает lynx дважды, обрабатывая сайт по доменному имени с "www" и обрабатывая сайт по доменному имени без "www".

Получающиеся два файла помещаются в две разные папки, здесь это /home/me/sitemap/www/ и /home/me/sitemap/www2/. А директория /home/me/sitemap/sitemap/ предназначена для создаваемого sitemap.xml.

1. Путь к bash:


#!/bin/bash

2. Переход в папку. Браузер lynx поместит туда файлы, полученные при обработке сайта по доменному имени с "www":


cd /home/me/sitemap/www/

3. Запуск браузера lynx для обработки сайта. Поскольку lynx может пропустить некоторые ссылки, если доменное имя сайта будет указано с или без "www", bash-скрипт запускает lynx дважды, обрабатывая сайт и по доменному имени с "www", и по доменному имени без "www". В данной строке bash-скрипта - с "www".

Lynx автоматически пройдет по всем страницам и ссылкам на них. Все куки будут приниматься. С помощью -connect_timeout можно указать сколько времени в секундах lynx будет пытаться перейти по каждой ссылке:


lynx -crawl -traversal -accept_all_cookies -connect_timeout=30 http://www.compmiscellanea.com/ > /dev/null

4. Переход в другую папку - lynx поместит туда файлы, полученные при обработке сайта по доменному имени без "www"


cd /home/me/sitemap/www2/

5. Запуск браузера lynx для обработки сайта. Поскольку lynx может пропустить некоторые ссылки, если доменное имя сайта будет указано с или без "www", bash-скрипт запускает lynx дважды, обрабатывая сайт и по доменному имени с "www", и по доменному имени без "www". В данной строке bash-скрипта - без "www".

Lynx автоматически пройдет по всем страницам и ссылкам на них. Все куки будут приниматься. С помощью -connect_timeout можно указать сколько времени в секундах lynx будет пытаться перейти по каждой ссылке:


lynx -crawl -traversal -accept_all_cookies -connect_timeout=30 http://compmiscellanea.com/ > /dev/null

6. При запуске браузера lynx дважды, для обработки сайта и по доменному имени с "www", и по доменному имени без "www", создаются два файла с собранными ссылками. Здесь содержимое второго файла добавляется к концу первого:


cat /home/me/sitemap/www2/traverse.dat >> /home/me/sitemap/www/traverse.dat

7. Ссылки, собранные lynx при обработке сайта по доменному имени без "www" не содержат "www.". Что бы сделать список ссылок единообразным, "www." у остальных ссылок тоже убираются. Затем они все сортируются по алфавиту с помощью sort. Затем uniq удаляет повторяющиеся записи. После чего результат сохраняется в файл "sitemap.xml", создаваемый в процессе:


cat /home/me/sitemap/www/traverse.dat | sed -e 's/\<www\>\.//g' | sort | uniq > /home/me/sitemap/sitemap/sitemap.xml

8. Если в URL есть &, ', ", > и <, они заменяются на &amp;, &apos;, &quot;, &gt;, &lt;. Другие специальные и не-ASCII символы должны быть приведены в соответствие с действующими стандартами файла sitemap.xml { 1 } и общей практикой { 2 } разработчиками веб-сайта, страницы которого будут обрабатываться или CMS этого сайта.

Иначе lynx будет пробовать понять эти URL согласно своим правилам и возможностям, пробовать их прочитать и записать в traverse.dat. В зависимости от среды, где lynx запущен, это иногда может быть более или менее успешно, а иногда более или менее нет.

& заменяется на &amp;


sed -i 's/\&/\&amp\;/g' /home/me/sitemap/sitemap/sitemap.xml

9. ' заменяется на &apos;


sed -i "s/'/\&apos\;/g" /home/me/sitemap/sitemap/sitemap.xml

10. " заменяется на &quot;


sed -i 's/"/\&quot\;/g' /home/me/sitemap/sitemap/sitemap.xml

11. > заменяется на &gt;


sed -i 's/>/\&gt\;/g' /home/me/sitemap/sitemap/sitemap.xml

12. < заменяется на &lt;


sed -i 's/</\&lt\;/g' /home/me/sitemap/sitemap/sitemap.xml

13. Ко всем ссылкам добавляется www.


sed -i 's/http:\/\//http:\/\/www\./g' /home/me/sitemap/sitemap/sitemap.xml

14. Перед каждой строкой добавляется <url><loc>:


sed -i -e 's/^/<url><loc>/' /home/me/sitemap/sitemap/sitemap.xml

15. После каждой строки добавляется </url></loc>:


sed -i -e 's/$/<\/loc><\/url>/' /home/me/sitemap/sitemap/sitemap.xml

16. Перед содержимым файла добавляются открывающие теги XML документа и комментарий:


sed -i -e '1 i <?xml version="1\.0" encoding="UTF-8"?>\r\r<urlset xmlns="http:\/\/www\.sitemaps\.org\/schemas\/sitemap\/0\.9" xmlns:xsi="http:\/\/www\.w3\.org\/2001\/XMLSchema-instance" xsi:schemaLocation="http:\/\/www\.sitemaps\.org\/schemas\/sitemap\/0\.9 http:\/\/www\.sitemaps\.org\/schemas\/sitemap\/0\.9\/sitemap\.xsd">\r\r<!-- created by sitemap.sh from http:\/\/www.compmiscellanea.com\/en\/lynx-browser-creating-sitemap.xml\.htm -->\r\r' /home/me/sitemap/sitemap/sitemap.xml

17. После содержимого файла добавляется закрывающий тег XML документа:


sed -i -e '$ a \\r</urlset>' /home/me/sitemap/sitemap/sitemap.xml

18. Удаление ненужных ссылок по содержанию в них указанной строки:


sed -i '/static/d' /home/me/sitemap/sitemap/sitemap.xml

19. Сообщение, что процесс завершен:


echo "...Done"

Документация

Операционные системы
Ещё