【问题标题】:iPhone: How to download a full website?iPhone:如何下载完整的网站?
【发布时间】:2010-06-18 21:13:28
【问题描述】:

您建议我用什么方法将网站(一个包含所有图片的 HTML 网站)下载到 iPhone?

问题是如何抓取所有这些微小的位(Javascript、图像、CSS)并将它们保存在本地。这与具体实现无关(我知道如何使用 NSURLRequest 之类的东西。我正在寻找一种爬虫/蜘蛛方法)。

越狱无效,因为它适用于官方(App Store)应用。

问候,

斯蒂芬

【问题讨论】:

  • 您是想在您自己的应用中还是从现有应用中执行此操作?
  • 是的,我尝试在自己的应用程序中执行此操作。所以我正在寻找一种方法,如何在 Objective-C 中编写代码。
  • @Stefan:您是否尝试下载整个网站(例如:apple.com 及其所有子文件和文件夹,如 apple.com/iphone/、apple.com/store 等),还是您想获得一个网页页面,比如这个?
  • 啊,现在我明白了。不,我尝试下载一个网页。但是,对于这个单页,我需要所有子文件和子文件夹(例如 /stylesheets/test.css)。
  • 那么,您需要显示页面所需的所有文件吗?

标签: iphone cocoa-touch download web-crawler


【解决方案1】:

正在下载吗?或者获取网站的 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"]];

编辑: 对于这种方法,您最好使用 iPhone 的正则表达式库来解析字符串并找到所需的对象。

您可以使用这个:RegexKitLite,并执行几个正则表达式来查找,例如,<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];

【讨论】:

  • 不是一个反对者,但我认为他要求下载整个网站,而不仅仅是一个 HTML 页面。您可能会考虑更新您的答案以添加有关解析 HTML、将链接拉入队列并循环它的信息。任何不需要越狱的解决方案都比我的恕我直言。
  • 嗯,他写了一个 HTML 站点,所以我不认为他的意思是整个网站。无论如何,这不是我在阅读他的问题时想到的:)
  • 而且他也没有说要从现有的应用程序中做这件事,或者创建自己的应用程序。所以,由于 SO 是一个 coding 网站,我显然想到了一个代码解决方案。
  • 埃米尔,我对你的回答投了赞成票。而且我知道如何下载单个页面。但我的问题的核心是如何抓取和下载网站的所有微小部分以保存它。问候,斯特凡
  • 啊,好的。如果我发现与此相关的内容,也许我会编辑我的答案。
【解决方案2】:
  • 在您越狱的 iPhone 上安装 wget
  • 使用spanning hosts 选项从站点下载所有内容。

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

但您为什么要在移动设备上执行此操作?这应该在具有大量内存、磁盘空间、带宽和多个 CPU 内核的真实计算机上完成。

【讨论】:

  • 抱歉,因为我想在 App Store 上发布我的应用程序,所以我不能使用越狱。 ;-)
  • @Stefan 你可能应该在你的帖子中提到过,人们很困惑 :)
  • 我为什么要做这款手机?允许用户在本地保存网站(准确地说是网页)以供离线查看。我不想用每个子页面抓取整个网站。我只想抓取所有子文件和子文件夹的一页。
【解决方案3】:

正在寻找类似的功能并找到了这个。不能为它声称任何功劳,只是想确保对它感兴趣的人提到它(作为一种插入式解决方案)。

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

【讨论】:

    【解决方案4】:

    您无法将网站保存到手机中,只能查看(除非您越狱)。

    希望这能消除您的困惑, 李。

    【讨论】:

    • 错了,你可以保存源代码,然后在 UIWebView 中使用。
    【解决方案5】:

    这是应用商店链接https://itunes.apple.com/us/app/sitesucker/id346896838?mt=8 该应用程序将整个网站本地下载到手机。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多