Wget добавляет строку запроса в полученный файл
Я пытаюсь получить рабочие веб-страницы с помощью wget, и это хорошо подходит для большинства сайтов со следующей командой:
wget -p -k http://www.example.com
В этих случаях я получаю index.html и необходимый CSS/JS и т.д.
ОДНАКО, в определенных ситуациях URL-адрес будет иметь строку запроса, и в этих случаях я получаю index.html с добавленной строкой запроса.
Пример
www.onlinetechvision.com/?p=566
В сочетании с приведенной выше командой wget будет:
index.html?page=566
Я попытался использовать параметр --restrict-file-names = windows, но это только меня заставило
[email protected]=566
Может ли кто-нибудь объяснить, почему это необходимо, и как я могу получить обычный файл index.html?
ОБНОВЛЕНИЕ: Я как бы нахожусь на заборе о другом подходе. Я узнал, что могу взять первое имя файла, которое wget сохраняет, анализируя вывод. Поэтому имя, появившееся после сохранения: есть тот, который мне нужен.
Однако это обернуто этим странным символом â - а не просто удалением этого жесткого кода - откуда это происходит?
Ответы
Ответ 1
Если вы попытаетесь с параметром "--adjust-extension"
wget -p -k --adjust-extension www.onlinetechvision.com/?p=566
вы приближаетесь. В папке www.onlinetechvision.com появится файл с исправленным расширением: [email protected]=566.html
или index.html?p=566.html
on * NiX-системы. Теперь просто изменить этот файл на index.html даже с помощью script.
Если вы находитесь в ОС Microsoft, убедитесь, что у вас есть последняя версия wget - она также доступна здесь: https://eternallybored.org/misc/wget/
Ответ 2
Чтобы ответить на ваш вопрос о том, почему это необходимо, помните, что веб-сервер, скорее всего, вернет разные результаты на основе параметров строки запроса. Если запрос для index.html?page=52
возвращает разные результаты из index.html?page=53
, вы, вероятно, не захотите, чтобы обе страницы были сохранены в одном файле.
Каждый HTTP-запрос, который использует другой набор параметров запроса, является буквально запросом для отдельного ресурса. wget не может предсказать, какое из этих изменений и не будет значительным, поэтому оно делает консервативную вещь и сохраняет URL-адреса параметров запроса в имени файла локального документа.
Ответ 3
Строка запроса требуется из-за дизайна веб-сайта, что делает сайт, используя тот же стандартный index.html для всего содержимого, а затем используя кнопку запроса, чтобы вытащить содержимое с другой страницы, например, с помощью script на сервере боковая сторона. (это может быть клиентская сторона, если вы смотрите в JavaScript).
Вы пытались использовать --no-cookies, это могло бы хранить эту информацию через cookie и вытаскивать ее, когда вы нажимаете на страницу. также это может быть вызвано логикой перезаписи URL-адресов, с которой у вас будет мало контроля со стороны клиента.
Ответ 4
Мое решение состоит в том, чтобы сделать рекурсивный сканирование вне wget:
- получить структуру каталогов с помощью wget (без файла)
- чтобы получить файл главной записи (index.html) из каждого каталога
Это хорошо работает с сайтами wordpress. Может пропустить несколько страниц.
#!/bin/bash
#
# get directory structure
#
wget --spider -r --no-parent http://<site>/
#
# loop through each dir
#
find . -mindepth 1 -maxdepth 10 -type d | cut -c 3- > ./dir_list.txt
while read line;do
wget --wait=5 --tries=20 --page-requisites --html-extension --convert-links --execute=robots=off --domain=<domain> --strict-comments http://${line}/
done < ./dir_list.txt
Ответ 5
используйте опции -O или --output-document. см. http://www.electrictoolbox.com/wget-save-different-filename/