2009-11-12 3 views
3

Я столкнулся с проблемой во время работы над проектом. Я хочу «сканировать» определенные интересующие сайты и сохранять их как «полную веб-страницу», включая стили и изображения, чтобы создать для них зеркало. Мне приходилось несколько раз добавлять закладки на сайт, чтобы прочитать его позже, и через несколько дней сайт был недоступен, потому что он был взломан, и у владельца не было резервной копии базы данных.Сохранить полную веб-страницу

Конечно, я могу читать файлы с php очень легко с помощью fopen("http://website.com", "r") или fsockopen(), но главная цель - сохранить полные веб-страницы, поэтому на случай, если он снизится, он все равно может быть доступен другим, как «время программирования» машина ":)

Есть ли способ сделать это без чтения и сохранения каждой ссылки на странице?

Решения Objective-C также приветствуются, так как я также пытаюсь выяснить его.

Спасибо!

ответ

16

Вам действительно нужно разобрать html и все файлы css, на которые ссылаются, что НЕ легко. Однако быстрый способ сделать это - использовать внешний инструмент, например wget. После установки wget вы можете запускать из командной строки wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://example.com/mypage.html

Это загрузит mypage.html и все связанные css-файлы, изображения и изображения, связанные внутри css. После установки wget в вашей системе у вас есть возможность использовать функцию php's system() для управления программным обеспечением wget.

ПРИМЕЧАНИЕ: Вам нужно по крайней мере Wget 1,12 правильно сохранить изображения, которые являются ссылками через CSS файлы.

3

Есть ли способ сделать это без чтения и сохранения каждой ссылки на странице?

Короткий ответ: Нет

Более длинный ответ: если вы хотите, чтобы сохранить каждую страницу на веб-сайте, вы будете иметь, чтобы прочитать каждую страницу в веб-сайт с что-то на каком-то уровне.

Возможно, стоит посмотреть приложение Linux wget, которое может сделать что-то вроде того, что вы хотите.

Одно предупреждение - сайты часто имеют ссылки на другие сайты, имеющие ссылки на другие сайты и т. Д. Убедитесь, что вы положили какое-то состояние stop if different domain в своего паука!

0

Независимо от того, что приложение собирается выполнить (ваш код или код, который вы найдете), нужно будет сделать именно это: загрузить страницу, проанализировать ее для ссылок на внешние ресурсы и ссылки на другие страницы, а затем скачайте все это. Так работает Интернет.

Но вместо того, чтобы делать тяжелую себя, почему бы не проверить локон и Wget? Они являются стандартными для большинства Unix-подобных ОС, и делают практически то, что вы хотите. В этом случае ваш браузер, вероятно, тоже работает, по крайней мере, на одной странице (хотя было бы труднее запланировать это).

0

Я не уверен, что вам нужно программное решение для «обхода веб-сайтов» или лично необходимо сохранить веб-сайты для просмотра в автономном режиме, но если это последнее, для Windows есть отличное приложение для Windows - Teleport Pro и SiteCrawler для Mac.

1

Если вы предпочитаете решение Objective-C, вы можете использовать WebArchive class from Webkit.
Он предоставляет публичный API, который позволяет хранить целые веб-страницы в виде файла .webarchive. (Как Safari, когда вы сохраняете веб-страницу).

Некоторые интересные особенности webarchive format:

  • полностью автономен (. Включая CSS, скрипты, изображения)
  • QuickLook поддержка
  • Легко в decompose
Смежные вопросы