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)
摘要:
将libxml2添加到项目中,以下是XCode4的一些快速说明:http://cmar.me/2011/04/20/adding-libxml2-to-an-xcode-4-project/
获取XPathQuery.h/.m
使用XPath语句查询html文档.
使用XML解析器解析HTML通常无法正常工作,因为许多站点都有不正确的HTML,Web浏览器将处理这些HTML,但严格的XML解析器NSXMLParser
将完全失败.
对于许多脚本语言而言,有一些非常慷慨的抓取库.就像Python的Beautiful Soup模块一样.不幸的是,我不知道Objective-C的这些模块.
将东西装入UIWebView
可能是最简单的方法.请注意,您不必将其UIWebView
放在屏幕上.您可以创建一个单独的UIWindow
并添加UIWebView
到它,以便您进行完整的屏幕外渲染.我想有一个关于这个的WWDC2009视频.正如你已经提到的,它虽然不会轻巧.
根据您需要的数据和您需要解析的页面的复杂性,您也可以使用正则表达式甚至手写解析器来解析它.我已经多次这样做了,对于简单的数据,这很有效.
归档时间: |
|
查看次数: |
10629 次 |
最近记录: |