Браузер 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/\&/\&\;/g' /home/me/sitemap/sitemap/sitemap.xml
sed -i "s/'/\&apos\;/g" /home/me/sitemap/sitemap/sitemap.xml
sed -i 's/"/\"\;/g' /home/me/sitemap/sitemap/sitemap.xml
sed -i 's/>/\>\;/g' /home/me/sitemap/sitemap/sitemap.xml
sed -i 's/</\<\;/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 есть &, ', ", > и <, они заменяются на &, ', ", >, <. Другие специальные и не-ASCII символы должны быть приведены в соответствие с действующими стандартами файла sitemap.xml { 1 } и общей практикой { 2 } разработчиками веб-сайта, страницы которого будут обрабатываться или CMS этого сайта.
Иначе lynx будет пробовать понять эти URL согласно своим правилам и возможностям, пробовать их прочитать и записать в traverse.dat. В зависимости от среды, где lynx запущен, это иногда может быть более или менее успешно, а иногда более или менее нет.
& заменяется на &
sed -i 's/\&/\&\;/g' /home/me/sitemap/sitemap/sitemap.xml
9. ' заменяется на '
sed -i "s/'/\&apos\;/g" /home/me/sitemap/sitemap/sitemap.xml
10. " заменяется на "
sed -i 's/"/\"\;/g' /home/me/sitemap/sitemap/sitemap.xml
11. > заменяется на >
sed -i 's/>/\>\;/g' /home/me/sitemap/sitemap/sitemap.xml
12. < заменяется на <
sed -i 's/</\<\;/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"
Документация
- Документация браузера lynx по опциям -traversal и -crawl: CRAWL.announce
Операционные системы
- Linux