
Хорошо, вот что мне нужно:
- Я использую 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 НЕ добавляется
- Ссылки не конвертируются
Итак... есть идеи?
решение1
Во-первых, похоже, это проблема только OS X. Я могу использовать указанную выше команду в Ubuntu 14.04 LTS, и она работает из коробки! Несколько предложений:
.css
файлы, изображения и т. д., похоже, не загружаются – по крайней мере, до того уровня, который я оставил запущенным (ладно, возможно, они были бы загружены, если бы процесс был завершен, так что этот пункт можно пропустить)
Когда вы говорите
--domains wikispaces.com
, вы не будете загружать связанные файлы CSS, расположенные на других доменах. Некоторые таблицы стилей на этом сайте расположены на ,http://c1.wikicdn.com
как предполагает источникindex.html
.Некоторые веб-сайты не позволяют вам получить доступ к своим связанным файлам (ссылочным изображениям) напрямую по их ссылке (см.эта страница). Их можно просматривать только через веб-сайт. Но, похоже, здесь это не так.
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.
Открытие ссылки в браузере переносит вас на страницу входа. Название файла предполагает, что это произошло где-то в комментариях.
Многие сайты не разрешают загрузку с помощью менеджеров загрузок, поэтому они проверяют, какой клиент инициировал HTTP-запрос (включая браузер или любой другой клиент, который вы использовали для запроса файла с их сервера).
Используйте
-U somebrowser
для подделки клиента и притворяйтесь браузером. Например,-U mozilla
можно добавить, чтобы сообщить серверу, что Mozilla/Firefox запрашивает страницу. Однако это не проблема, так как я могу загрузить сайт и без этого аргумента.Скорость загрузки и запроса важна. Серверы не хотят, чтобы их производительность была раздута роботами, запрашивающими данные с их сайта. Используйте аргументы
--limit-rate=
и--wait=
в Wget, чтобы ограничить скорость загрузки и подождать несколько секунд между генерацией запросов get для отдельных файлов.например
wget -r --wait=5 --limit-rate=100K <other arguments>
ждать 5 секунд между запросами get и ограничивать скорость загрузки до 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-доступ к серверу.
Надеюсь это поможет.
решение2
Вариант 1 изответ пользователя user612013была, конечно, проблема в моем случае. На самом деле, все пошло не так, потому что я запросил https://censoreddomain.com
вместо https://www.censoreddomain.com
(обратите внимание наwww.
). После того, как я добавил www.
, wget
он с радостью очистил весь сайт для меня. Поэтому важноточно соответствовать каноническому имени домена, который вы пытаетесь извлечь.
Поскольку ошибка была моей, я думаю, что эта «фишка» применима ко wget
всем платформам, а не только к OS X.