Пакет wget Python загружает/сохраняет XML без проблем, но не текстовые или html файлы
Я использовал этот базовый код для загрузки и хранения обновленных карт сайта с хостинга/службы краулинга, и он отлично работает для всех XML-файлов. Однако текстовые и HTML-файлы оказываются в неправильной кодировке, но когда я принудительно привожу их все к одной кодировке (UTF-8), изменений не происходит, и файлы остаются нечитаемыми (скриншоты прилагаются). Независимо от того, какая кодировка используется, файлы TXT и HTML не читаются, но файлы XML в порядке.
Я использую Python 3.10, Django 3.0.9 и последний доступный пакет wget python (3.2) на Windows 11. Я также пробовал использовать urllib и другие пакеты с теми же результатами.
Код:
sitemaps = ["https://.../sitemap.xml",
"https://.../sitemap_images.xml",
"https://.../sitemap_video.xml",
"https://.../sitemap_mobile.xml",
"https://.../sitemap.html",
"https://.../urllist.txt",
"https://.../ror.xml"]
def download_and_save(url):
save_dir = settings.STATICFILES_DIRS[0]
filename = url.split("/")[-1]
full_path = os.path.join(save_dir, filename)
if os.path.exists(full_path):
os.remove(full_path)
wget.download(url, full_path)
for url in sitemaps:
download_and_save(url)
Для всех XML-файлов я получаю следующее (что является правильным результатом):
Для файлов urllist.txt и sitemap.html результат такой:
Я не уверен, почему XML-файлы сохраняются нормально, но кодировка путается только для текстовых (.txt) и html-файлов.
После разговора с хостинг-провайдером sitemap (pro-sitemaps.net) выяснилось, что проблема была на их стороне. Файлы HTML и TXT, которые я загружал, передавались с неправильной кодировкой (или что-то похожее на это). Хотя эти файлы были видны/доступны в браузере по прямым URL на их сервисе, они не передавались через wget с правильной кодировкой, как оказалось.
Я отправил тикет провайдеру, и проблема была решена в течение 12 часов (хотя я не получил подтверждения точного вопроса, который вызвал мою проблему здесь). Теперь я проверил, что файлы TXT и HTML передаются им в правильной кодировке/формате с помощью wget.