6

ОК, вот что мне нужно:

  • Я на Mac (Mac OS X 10.6.8)
  • Я хочу полностью отразить сайт на своем жестком диске (это то, что я использую в качестве теста)
  • Я хочу, чтобы все изображения и предпосылки были там, чтобы веб-сайт можно было просматривать в автономном режиме
  • Я хочу, чтобы относительные ссылки на всех страницах были соответственно обновлены
  • (* необязательно) .html расширения для всех файлов будут хороши, так что они могут быть легко распознаны и открыты браузером

Это то, что я использую:

wget --recursive --no-clobber --page-requisites --convert-links --html-extension --domains wikispaces.com http://chessprogramming.wikispaces.com/

Дело в том :

  • Файлы .css изображения и т. д., похоже, не загружаются - по крайней мере, до уровня, который я оставил запущенным (хорошо, может быть, они будут загружены, если процесс будет завершен, поэтому мы можем пропустить этот)
  • НЕТ расширение HTML добавляется
  • Ссылки не конвертируются

Итак ... есть идеи?

2 ответа2

3

Во-первых, это, кажется, проблема только для OS X. Я могу использовать вышеупомянутую команду на Ubuntu 14.04 LTS, и она работает из коробки! Несколько предложений:

Файлы .css изображения и т. д., похоже, не загружаются - по крайней мере, до уровня, который я оставил запущенным (хорошо, может быть, они будут загружены, если процесс будет завершен, поэтому мы можем пропустить этот)

  1. Когда вы говорите --domains wikispaces.com , вы не будете загружать связанные CSS-файлы, расположенные в других доменах. Некоторые из таблиц стилей на этом сайте расположены по http://c1.wikicdn.com что указывает на источник index.html.

  2. Некоторые веб-сайты не позволяют вам получать доступ к их связанным файлам (ссылочным изображениям) напрямую по их ссылке (см. Эту страницу). Вы можете просматривать их только через веб-сайт. Похоже, что это не так здесь.

  3. Wget, похоже, не распознает комментарии при разборе HTML. Когда Wget работает, я вижу следующее:

--2016-07-01 04:01:12--  http://chessprogramming.wikispaces.com/%3C%25-%20ws.context.user.imageUrlPrefix%20%25%3Elg.jpg
Reusing existing connection to chessprogramming.wikispaces.com:80.
HTTP request sent, awaiting response... 404 Not Found
2016-07-01 04:01:14 ERROR 404: Not Found.

Открыв ссылку в браузере, вы попадете на страницу входа. Название файла предполагает, что это произошло где-то в комментариях.

  1. Многие сайты не разрешают загрузку с помощью менеджеров загрузки, поэтому они проверяют, какой клиент отправил HTTP-запрос (включая браузер или какой-либо другой клиент, которого вы использовали для запроса файла со своего сервера).

Используйте -U somebrowser чтобы подделать клиента и притвориться браузером. Например, можно добавить -U mozilla , чтобы сообщить серверу, что Mozilla/Firefox запрашивает страницу. Это, однако, не является проблемой, так как я могу скачать сайт без этого аргумента.

  1. Скорость загрузки и запроса важна. Серверы не хотят, чтобы их производительность вздувалась роботами, запрашивающими данные с их сайта. Используйте --limit-rate= и --wait= в Wget, чтобы ограничить скорость загрузки и подождать несколько секунд между генерацией запросов на получение отдельных файлов.

например

wget -r --wait=5 --limit-rate=100K <other arguments>

подождать 5 секунд между запросами получения и ограничить скорость загрузки до 100 Кбит / с. Еще раз, это не проблема здесь, потому что сервер не требовал, чтобы я ограничил скорость загрузки для загрузки веб-сайта.

Наиболее вероятный случай здесь (1). Замените --domains wikispaces.com на --domains * и попробуйте снова. Посмотрим, куда мы доберемся. Вы должны быть в состоянии получить файлы CSS по крайней мере.

НЕТ расширение HTML добавляется

Расширение HTML добавляется при запуске команды.

Ссылки не конвертируются

Я не думаю, что я полностью прав, но не ожидаю, что ссылки будут работать из коробки, когда вы зеркально отражаете сайт.

Когда вы передаете аргумент в запрос HTTP get (например, http://chessprogramming.wikispaces.com/wiki/xmla?v=rss_2_0 имеет аргументы v=rss_2_0), запрос обрабатывается некоторым скриптом, работающим на сервере, для пример PHP. Аргументы помогут вам выбрать правильную версию скрипта в зависимости от аргументов. Помните, что когда вы зеркалируете сайт, особенно Wiki, который работает на PHP, вы не можете точно зеркалировать сайт, пока не получите оригинальные сценарии PHP. HTML-страницы, возвращаемые PHP-скриптами, - это всего лишь одна сторона страницы, которую вы можете увидеть в этом скрипте. Правильный алгоритм, который генерирует страницу, хранится на сервере и будет корректно отражаться только в том случае, если вы получите исходный файл PHP, чего нельзя сделать с помощью HTTP. Для этого вам нужен FTP доступ к серверу.

Надеюсь это поможет.

1

Вариант 1 из российского ответа "Союз Ракета", безусловно, был проблемой в моем случае. Фактически, это просто пошло не так, потому что я запросил https://censoreddomain.com вместо https://www.censoreddomain.com (обратите внимание на www.). Однажды я добавил www. wget счастливо выскоблил весь сайт для меня. Поэтому важно точно соответствовать каноническому имени домена, который вы пытаетесь очистить.

Поскольку ошибка была моей, я думаю, что этот "улов" применим к wget на всех платформах, а не только в OS X.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .