NSURLRequest / URLWithString未加载整个网页文本

时间:2014-02-27 23:45:29

标签: html ios xpath

我正在启动一个iOS项目,其中包括从网页中解析一些数据。我打算用

我开始使用“http://www.facebook.com。”作为我的测试用例,XPath(通过Hpple使用Libxml2)来解析页面。 XPath / Hpple似乎运行良好,但我注意到我无法从页面中找到用户的帖子。在尝试了许多XPath命令组合后,我意识到用户帖子不在文本NSURLRequest或URLWithString中给我。据我所知,它似乎有很多结构类型数据。

当我使用FireFox& FireBug我在Div节点中看到帖子,例如

<div data-ft="{&quot;tn&quot;:&quot;K&quot;}" class="mbs _5pbx userContent">We are accepting donations at our thrift store!! Please bring your gently used items here/div>

当我直接从FireFox获取页面源时,大多数用户帖子也会丢失。因此,以下事情之一正在发生。

  1. 我不了解HTML的结构,需要使用不同的方式来加载此文本。
  2. FB有一个非常复杂的HTML,它以某种方式编码/隐藏文本。
  3. NSURL有一些设置我不明白是编码/没有以某种方式加载此文本我找不到它。
  4. 我可以从一个更简单的网站开始,但我选择了FB因为它的复杂性,因为我想确保我编写的解析器可以在它给出的任何网站上工作。

    我确信这对我如何解析网页是一个非常明显的误解,有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

  

我可以从一个更简单的网站开始,但我选择了FB因为它的复杂性,因为我想确保我编写的解析器可以在它给出的任何网站上工作。

可能不是最好的开始方式。在遇到复杂的案例之前,最好先解决一些简单的问题。


关于你的具体问题:不要试图刮掉Facebook。他们使用大量的ajax来获取数据,第一步是使用无头浏览器,你需要自动化(但是会导致表现大幅下降)。接下来,他们经常更改他们的网站,解析它可能会经常破坏。

另一方面,他们提供stable and easy-to-use API,即also available as SDK for iOS

答案 1 :(得分:1)

单个HTML页面(基本上是单个文本文件)和浏览器中显示“在行动中”的页面之间存在巨大差异,该页面的作用类似于HTML源代码的编译器,加载JS,CSS,图像和其他文件,开始执行JavaScripts(和其他脚本),这反过来可能会加载大量的JSON数据,这反过来又会加载大量额外的HTML或动态更改DOM模型。

NSURLRequest / URLWithString只返回原始HTML - 小文本文件。

您在Firefox中作为用户看到的内容,或通过FireBug检查DOM模型 - 这就是浏览器的用途,这与您收到的文件有所不同 NSURLRequest / URLWithString方法。

因此,如果您了解所有这些复杂性,要​​么您想要开发自己的浏览器,要么您需要查看WebKit并查看它是否对您有帮助。