Вопрос или проблема
Я пытаюсь скачать весь сайт с помощью wget
, и вот команда, которую я использую:
wget --recursive --no-clobber --page-requisites --convert-links --domains example.com --no-parent http://www.example.com/en/
Работает всё хорошо, но есть одна проблема. Есть файлы (в основном изображения), в именах которых содержатся китайские символы, такие как:
После скачивания файл сохраняется с таким именем:
??%96页主KV3.jpg
И в html-странице он указан так, и поэтому возникает ошибка 404:
�%2596页主KV3.jpg
Интересно, как можно предотвратить эту несоответствие?!
Я тоже боролся с этим сегодня.
В моем случае проблема была с немецкими буквами, такими как ä,ö,ü
Я решил её, установив все настройки языка на UTF-8
.
Вы можете увидеть урок здесь:
https://perlgeek.de/en/article/set-up-a-clean-utf8-environment
Ответ или решение
Для того чтобы правильно скачать файлы с URL, закодированными в UTF-8 (включая знаки, такие как китайские и немецкие буквы), с использованием инструмента wget
, необходимо учесть несколько важных аспектов. wget
по умолчанию может не обрабатывать корректно такие символы, что приводит к неразборчивым именам файлов. В этой статье мы рассмотрим решение данной проблемы.
Что такое кодировка URL?
Кодировка URL — это способ представления специальных символов в URL с использованием их ASCII-значений, что позволяет обеспечить правильное отображение. Для символов, не входящих в стандартный набор ASCII, используется кодировка, но если окружение неправильно настроено, может возникнуть путаница, как в вашем случае.
Как решить проблему с неправильными именами файлов
-
Настройка окружения: Убедитесь, что ваше окружение настроено на использование кодировки UTF-8. Это может быть выполнено с помощью настройки переменных окружения. Например, в Linux вы можете установить переменные в вашем
.bashrc
или.bash_profile
следующим образом:export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8
После внесения изменений не забудьте перезагрузить терминал или выполнить команду
source ~/.bashrc
. -
Использование параметров
wget
для корректной обработки:
wget
имеет опцию, которая помогает в работе с именами файлов. Вы можете использовать параметр--restrict-file-names
, чтобы указать допустимые символы в именах файлов. Однако для вашего случая важнее указание кодировки вwget
через опцию--no-check-certificate
, чтобы избежать ошибок в случаях изменения имён файлов на сервере. -
Запуск команды wget:
Вы можете использовать следующую команду для загрузки вашего сайта:
wget --recursive --no-clobber --page-requisites --convert-links --domains example.com --no-parent --restrict-file-names=nocontrol http://www.example.com/en/
Примеры кодировки
Рассмотрим, как это работает на вашем примере с китайскими символами:
- Исходный URL:
http://www.example.com/path/to/%E9%A6%96%E9%A1%B5%E4%B8%BBKV3.jpg
- После применения правильных настроек и выполнения команды с
wget
, файл должен быть загружен с корректным именем首页主KV3.jpg
.
Заключение
С помощью правильной настройки окружения и параметров wget
вы сможете избежать проблем с загрузкой файлов с закодированными именами. Это позволит сохранить оригинальные названия файлов и избежать проблем с несовпадением путей, что может привести к ошибкам доступа (например, 404).
Если данное решение не помогло, возможно, стоит обратить внимание на другие инструменты для загрузки веб-контента, которые могут более гибко работать с кодировкой, например, curl
или специальные библиотеки для Python, такие как BeautifulSoup
с requests
.