我正在启动一个iOS项目,其中包括从网页中解析一些数据。我打算用
我开始使用“http://www.facebook.com。”作为我的测试用例,XPath(通过Hpple使用Libxml2)来解析页面。 XPath / Hpple似乎运行良好,但我注意到我无法从页面中找到用户的帖子。在尝试了许多XPath命令组合后,我意识到用户帖子不在文本NSURLRequest或URLWithString中给我。据我所知,它似乎有很多结构类型数据。
当我使用FireFox& FireBug我在Div节点中看到帖子,例如
<div data-ft="{"tn":"K"}" class="mbs _5pbx userContent">We are accepting donations at our thrift store!! Please bring your gently used items here/div>
当我直接从FireFox获取页面源时,大多数用户帖子也会丢失。因此,以下事情之一正在发生。
我可以从一个更简单的网站开始,但我选择了FB因为它的复杂性,因为我想确保我编写的解析器可以在它给出的任何网站上工作。
我确信这对我如何解析网页是一个非常明显的误解,有人能指出我正确的方向吗?
答案 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并查看它是否对您有帮助。