Создайте полную локальную копию веб-сайта с помощью Wget

Создайте полную локальную копию веб-сайта с помощью Wget

Хорошо, вот что мне нужно:

  • Я использую 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файлы, изображения и т. д., похоже, не загружаются – по крайней мере, до того уровня, который я оставил запущенным (ладно, возможно, они были бы загружены, если бы процесс был завершен, так что этот пункт можно пропустить)

  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.
    

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

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

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

  5. Скорость загрузки и запроса важна. Серверы не хотят, чтобы их производительность была раздута роботами, запрашивающими данные с их сайта. Используйте аргументы --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.

Связанный контент