Подтвердить что ты не робот

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 сохраняет, анализируя вывод. Поэтому имя, появившееся после сохранения: есть тот, который мне нужен.

Однако это обернуто этим странным символом â - а не просто удалением этого жесткого кода - откуда это происходит?

4b9b3361

Ответ 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