在iOS中解析XML /'屏幕抓取'的最佳方法是什么?UIWebview还是NSXMLParser?

Ben*_*hen 8 iphone screen-scraping uiwebview nsxmlparser ios

我正在创建一个需要从网页获取一些数据的iOS应用程序.我的第一个是使用NSXMLParser initWithContentsOfURL:和解析NSXMLParser代表的HTML .然而,这种方法似乎很快就会变得痛苦(例如,如果改变了HTML,我将不得不重写解析代码,这可能很尴尬).

看到我正在加载一个网页,我也看了一下UIWebView.看起来UIWebView可能是要走的路.stringByEvaluatingJavaScriptFromString:似乎是一种非常方便的方法来提取数据,并允许将javascript存储在一个单独的文件中,如果HTML发生变化,该文件很容易编辑.然而,使用UIWebView似乎有点hacky(看作UIWebView是一个UIView子类,它可能会阻止主线程,并且文档说javascript有10MB的限制).

在我遇到困难之前,有没有人对解析XML/HTML有任何建议?

更新:

我写了一篇关于我的解决方案的博客文章:iOS中的HTML解析/屏幕抓取

小智 10

我做过几次这样的事.我发现最好的方法是使用具有HTML模式的libxml2.然后,您可以使用XPath来查询文档.

使用libxml2 API并不是最有趣的.所以,我通常会带来这个页面上记录的XPathQuery.h/.m文件:

http://cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html

然后我使用NSConnection获取数据并使用以下内容查询数据:

NSArray *tdNodes = PerformHTMLXPathQuery(self.receivedData, @"//td[@class='col-name']/a/span");
Run Code Online (Sandbox Code Playgroud)

摘要:

  1. 将libxml2添加到项目中,以下是XCode4的一些快速说明:http://cmar.me/2011/04/20/adding-libxml2-to-an-xcode-4-project/

  2. 获取XPathQuery.h/.m

  3. 使用XPath语句查询html文档.


Ste*_*ntz 6

使用XML解析器解析HTML通常无法正常工作,因为许多站点都有不正确的HTML,Web浏览器将处理这些HTML,但严格的XML解析器NSXMLParser将完全失败.

对于许多脚本语言而言,有一些非常慷慨的抓取库.就像Python的Beautiful Soup模块一样.不幸的是,我不知道Objective-C的这些模块.

将东西装入UIWebView可能是最简单的方法.请注意,您不必将其UIWebView放在屏幕上.您可以创建一个单独的UIWindow并添加UIWebView到它,以便您进行完整的屏幕外渲染.我想有一个关于这个的WWDC2009视频.正如你已经提到的,它虽然不会轻巧.

根据您需要的数据和您需要解析的页面的复杂性,您也可以使用正则表达式甚至手写解析器来解析它.我已经多次这样做了,对于简单的数据,这很有效.