Вопрос или проблема
Я могу скачать один автономный html файл с:
wget https://www.bbc.co.uk/news/articles/c99rgj0xkryo
но wget сохранит файл как index.html
, а не Нация замерла в молчании, когда король проводит церемонию в память.html
. Как заставить wget использовать заголовок страницы?
В данном случае меня не волнует разрыв ссылок для оффлайн файлов. Меня волнует только скачивание автономных страниц.
Флаг -O
в wget
.
wget -O "Нация замерла в молчании, когда король проводит церемонию в память.html" https://www.bbc.co.uk/news/articles/c99rgj0xkryo
Вот скрипт для автоматического использования заголовка в качестве имени файла.
Вам понадобится https://www.html-tidy.org. Он есть в репозиториях большинства дистрибутивов.
#!/bin/bash
url="$1"
wget -O "temp_index.html" "$url"
tidy -m "temp_index.html"
title_data=$(grep "<title" "temp_index.html" | head -20 | cut -d'>' -f2-)
if [[ "$title_data" =~ "</title>" ]]; then
title_data=$(echo "$title_data" | sed 's/........$//')
fi
mv "temp_index.html" "$title_data".html
exit 0
После нескольких тестов я заметил, что форматирование страницы приводит к тому, что </title>
оказывается на следующей строке, но иногда это не так. Поэтому я добавил проверку, чтобы обработать оба сценария.
Сохраните как: html_to_title.sh
Смените режим на исполняемый: chmod +x html_to_title.sh
Использование: ./html_to_title.sh www.example.com
Ответ или решение
Чтобы использовать название страницы в качестве имени файла вместо стандартного index.html
, вы можете воспользоваться утилитой wget
и некоторыми дополнительными инструментами, такими как tidy
, которые помогут вам извлечь заголовок страницы. Ниже представлены детальные шаги для решения этой задачи, включая пример скрипта.
1. Установка необходимых инструментов
Перед тем как начать, убедитесь, что у вас установлены wget
и tidy
. Если они не установлены, вы можете сделать это с помощью менеджера пакетов вашей системы. Например, в Ubuntu используйте следующую команду:
sudo apt-get install wget tidy
2. Использование wget
для загрузки страницы
wget
позволяет загружать страницы с веб-сайтов. Однако по умолчанию он сохраняет загруженные файлы как index.html
. Чтобы переопределить это, вы можете использовать флаг -O
, чтобы указать желаемое имя файла, но для автоматического получения имени файла, основанного на заголовке страницы, нам потребуется немного больше кода.
3. Скрипт для автоматизации процесса
Создайте скрипт на Bash, который будет загружать HTML-страницу и извлекать заголовок, чтобы использовать его в качестве имени файла. Вот пример такого скрипта:
#!/bin/bash
url="$1"
# Загружаем HTML в временный файл
wget -O "temp_index.html" "$url"
# Убираем лишние теги и форматы для упрощения
tidy -m "temp_index.html"
# Извлекаем заголовок страницы
title_data=$(grep "<title" "temp_index.html" | head -20 | cut -d'>' -f2- | cut -d'<' -f1 | xargs)
# Проверяем наличие завершающего тега
if [[ "$title_data" =~ "</title>" ]]; then
title_data=${title_data%</title>}
fi
# Замена пробелов на символы _
filename=$(echo "$title_data" | sed 's/ /_/g')
# Переименовываем временный файл
mv "temp_index.html" "$filename.html"
exit 0
4. Инструкции по использованию скрипта
- Сохраните код в файл с именем
html_to_title.sh
. - Сделайте файл исполняемым с помощью команды:
chmod +x html_to_title.sh
- Запустите скрипт, передав адрес страницы в качестве аргумента:
./html_to_title.sh https://www.bbc.co.uk/news/articles/c99rgj0xkryo
5. Описание работы скрипта
- wget загружает HTML-код страницы в временный файл
temp_index.html
. - tidy позволяет очистить HTML-код и убрать лишние теги и атрибуты для упрощения.
- grep и другие команды работают в сфере обработки текста для извлечения содержимого тега
<title>
. - После извлечения заголовка скрипт преобразует пробелы в символы подчеркивания (можно изменить по желанию) и переименовывает временный файл в конечный.
Заключение
Теперь вы можете легко загружать веб-страницы и сохранять их с именами, основанными на заголовках. Этот скрипт будет полезен не только для локального сохранения информации, но и для упрощения работы с веб-контентом. Если у вас возникнут вопросы или потребуется помощь, не стесняйтесь обращаться за поддержкой.