iPhone: Как загрузить полный веб-сайт?

какой подход вы рекомендуете мне для загрузки веб-сайта (один HTML-сайт со всеми включенными изображениями) на iPhone?

Вопрос в том, как просканировать все эти крошечные кусочки (Javascripts, изображения, CSS) и сохранить их локально. Дело не в конкретной реализации (я знаю, как использовать NSURLRequest и прочее. Я ищу подход обхода/паука).

Побег из тюрьмы не сработает, так как он предназначен для официального (App Store) приложения.

С уважением,

Стефан


person Stefan    schedule 18.06.2010    source источник
comment
Вы пытаетесь сделать это в своем собственном приложении или в существующем приложении?   -  person Emil    schedule 19.06.2010
comment
Да, я пытаюсь сделать это в своем собственном приложении. Поэтому я ищу подход, как закодировать это в Objective-C.   -  person Stefan    schedule 19.06.2010
comment
@Stefan: Вы пытаетесь загрузить весь веб-сайт (например: apple.com со всеми подфайлами и папками, такими как apple.com/iphone/, apple.com/store и т. д.), или вы пытаетесь получить один веб-сайт? страница, как эта?   -  person Emil    schedule 19.06.2010
comment
А, теперь я вижу. Нет, я пытаюсь загрузить одну веб-страницу. Однако для этой единственной страницы мне нужны все подфайлы и подпапки (например, /stylesheets/test.css).   -  person Stefan    schedule 19.06.2010
comment
Итак, вам нужны все файлы, необходимые для отображения страницы?   -  person Emil    schedule 19.06.2010
comment
@Emil: Да, все файлы я могу достать :-)   -  person Stefan    schedule 19.06.2010
comment
Читать обновленный ответ.   -  person Emil    schedule 19.06.2010
comment
Что бы вы ни делали в конечном итоге, убедитесь, что вы соблюдаете файл robots.txt веб-сайта, который подвергается атаке.   -  person Joost Schuur    schedule 19.06.2010


Ответы (5)


Загрузка? Или получить HTML-код сайта и отобразить его с помощью UIWebView?

Если последнее, вы можете просто сделать это:

NSString *data = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://apple.com"] encoding:NSUTF8StringEncoding error:NULL];

// Load UIWebView with data
[webView loadHTMLString:data baseURL:[NSURL URLWithString:@"http://apple.com"]];

EDIT: Для этого подхода вам, вероятно, лучше всего использовать библиотеку регулярных выражений для iPhone для анализа строки и поиска необходимых объектов.

Вы можете использовать это: RegexKitLite и выполнить пару Regex-выражений, чтобы найти, например, <link rel="%" href="*"> и src="*". Но вы должны не забыть их сохранить и заменить значения * новым путем.

Хранение файлов:

Вы получите URL-адрес из методов регулярных выражений, и вы можете написать файлы из URL-адреса следующим образом:

NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString pathToCurrentSite = [rootPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@/", fullUrlToPage]];
for (urlString in urlStrings) {
    NSData *stringData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
    [fileManager createFileAtPath:[pathToCurrentSite stringByAppendingPathComponent:urlString] contents:stringData attributes:nil];
}
NSString *data;
NSData *pageData = [data dataUsingEncoding:NSASCIIStringEncoding];
[fileManager createFileAtPath:[pathToCurrentSite stringByAppendingPathComponent:@"index"] contents:pageData attributes:nil];
[fileManager release];
person Emil    schedule 18.06.2010
comment
Не против, но я думаю, что он попросил загрузить весь веб-сайт, а не только одну HTML-страницу. Вы можете обновить свой ответ, чтобы добавить информацию об анализе HTML, извлечении ссылок в очередь и зацикливании. Любое решение, не требующее джейлбрейка, лучше моего ИМХО. - person Byron Whitlock; 19.06.2010
comment
Хм, он написал один HTML-сайт, так что я не думаю, что он имел в виду целый сайт. Во всяком случае, это не то, о чем я думал, читая его вопрос :) - person Emil; 19.06.2010
comment
И он также ничего не сказал о том, чтобы сделать это из существующего приложения или создать свое собственное. Итак, поскольку SO является кодирующим веб-сайтом, я, очевидно, предпочитаю кодовое решение. - person Emil; 19.06.2010
comment
Эмиль, я проголосовал за твой ответ. И я знаю, как загрузить одну страницу. Но суть моего вопроса заключается в том, как просканировать и загрузить все крошечные части веб-сайта, чтобы сохранить его. С уважением, Стефан - person Stefan; 19.06.2010
comment
Ах хорошо. Возможно, я отредактирую свой ответ, если найду что-то актуальное по этому поводу. - person Emil; 19.06.2010
comment
Хорошо, синтаксический анализ регулярных выражений звучит как хорошая идея. Я постараюсь найти список вещей, которые мне нужно разобрать. Спасибо - person Stefan; 19.06.2010
comment
Вам, скорее всего, нужно разобрать только то, что я написал здесь, scr= используется для изображений и iFrames (единственные вещи, которые нужно хранить) и, конечно же, таблицы стилей. Их может быть больше, поэтому, вероятно, неплохо попытаться узнать больше о том, что вам нужно проанализировать. Ранее вы говорили, что, возможно, захотите загрузить все элементы файла, но я не думаю, что это сработает, изображения и таблицы стилей могут находиться в папках над файлом или даже на других веб-сайтах. Я думаю, что это подход, который вы должны использовать. - person Emil; 19.06.2010

  • Установите wget на сломанный iPhone.
  • Используйте параметры связующие хосты, чтобы загрузить все с сайт.

    wget -rH -Dserver.com http://www.server.com/

Но почему вы хотите сделать это на мобильном устройстве? Это то, что нужно делать на реальном компьютере с большим объемом памяти, дисковым пространством, пропускной способностью и несколькими ядрами процессора.

person Byron Whitlock    schedule 18.06.2010
comment
Извините, поскольку я хочу опубликовать свое приложение в App Store, я не могу использовать побег из тюрьмы. ;-) - person Stefan; 19.06.2010
comment
@Stefan Вы, вероятно, должны были упомянуть, что в своем посте люди запутались :) - person Emil; 19.06.2010
comment
Почему я хочу сделать этот мобильный? Чтобы позволить пользователям сохранять веб-сайт (точнее, веб-страницу) локально для просмотра в автономном режиме. Я не хочу сканировать весь сайт с каждой подстраницей. Я хочу сканировать только одну страницу для всех подфайлов и подпапок. - person Stefan; 19.06.2010

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

http://robnapier.net/offline-uiwebview-nsurlprotocol

person software evolved    schedule 06.08.2014

Вы не можете сохранять веб-сайты на свой телефон, только просматривать их (если ваш джейлбрейк не взломан).

Надеюсь, это прояснит твое замешательство, Ли.

person Lee Brooks    schedule 18.06.2010
comment
Неправильно, вы можете сохранить исходный код и позже использовать его в UIWebView. - person Emil; 19.06.2010

Вот ссылка на магазин приложений https://itunes.apple.com/us/app/sitesucker/id346896838?mt=8 Приложение изначально загружает на телефон целые веб-сайты.

person Pr0toc0L    schedule 10.01.2014