我想知道Objective-C中是否存在任何现有库或者可以从Objective-C访问哪些库,这样我就可以抓取格式为this one的页面。具体而言,所有日期和每个日期旁边的所有文本。如果没有,那么最好的方法是什么?常用表达?我听说NSString
可能已经有了内置的方法。这是真的吗?
我正在四处寻找是否有任何替代方法,例如XML文件或API。我找到了一个API,但我看到的唯一客户端是其他语言,他们似乎只能将内容发布到页面,而不是检索它。
编辑:所以我在这些链接中找到了有关API的更多信息:
我能够提出this request返回一些HTML编码文本(格式是XML,但它包含页面的文本,例如»a href=
等。我会继续浏览文档,看看我能否做到这一点好一点,如果没有,是否有解析这个的建议?
编辑2 :好的,感谢this doc page,我能够检索数据的最简单,最干净的方法是使用此constructed link返回原始数据(在wiki标记中)相关部分。但是,我想我需要解析它,但如果确实如此,它应该比整篇文章容易得多。
有没有人对解析wiki标记有任何建议,例如Objective-C中的以下内容?
==Events==
* [[710]] – [[Saracen]] invasion of [[Sardinia]].
*[[1275]] – Traditional founding of the city of [[Amsterdam]].
*[[1682]] – [[Philadelphia]], [[Pennsylvania]] is founded.
我想要最终得到的是,我想一个NSDictionary
或类似的集合,它将使用随附的信息片段存储日期。谢谢!
答案 0 :(得分:4)
如API:Data_formats所述,在查询末尾添加&format=fmt
。例如,您的查询变为:JSON query。您可以指定XML,JSON或许多其他格式。
您可以轻松解析整个部分,然后只将HTML格式的输出显示到Webview中。
答案 1 :(得分:3)
鉴于维基百科上的页面以明文形式存储,并由用户以明文形式输入,因此您不会从中获取结构化数据集。
答案 2 :(得分:3)
我以各种方式从WP中删除了大量数据。格式取决于很多东西,包括信息所在的子域类型以及输入时间。主要文本是自由格式,并没有简单的方法来刮它。信息框采用特殊的WP格式,多年来一直在变化。它不是为了被刮掉而设计的。
有一个数据库支持WP,它更有条理。
到目前为止,您最好的策略是联系您想要搜索的域中的维基人 - 他们将了解数据库格式并且可能能够提供帮助 - 他们肯定会希望提供帮助他们希望以语义形式看到WP(例如DBPedia - http://dbpedia.org/About)。
答案 3 :(得分:2)
Python算了吗? ;)可从Objective-C 访问。 并且有很多用于刮擦的模块:美丽的肥皂和/或机械化,你也可以考虑lxml。
答案 4 :(得分:1)
我将建议使用正则表达式在混合HTML数据流中进行目标数据提取。
手机上已有RegEx库,但它们有点隐藏 - 您可以使用RegexKitLite通过几个简单的调用来公开它们(确保向下滚动并获得简易版本)。它最终是一个在NSString上有一些扩展的类,它允许你做正则表达式,然后你将定义一个带有两个捕获的匹配的正则表达式 - 一个用于数字,一个用于内容,以及一些非捕获的匹配封闭和中间标签。即使它是标准RegEX的“精简”版本,它也只支持你需要的任何能力。
API方法很有前景,但是一旦获得原始标记,您可能不得不采用类似的正则表达式来解析数据。如果它减少了正则表达式的复杂性和数据传输时间,它仍然有意义,没有理由你不能将这两种方法结合起来。
答案 5 :(得分:0)
这绝对不是以任何语言进行的方式。
如果任何在线网站以良好的方式公开他们的数据,它将是维基百科。
考虑将文章作为XML,RDF或甚至是JSON。
答案 6 :(得分:0)
我有一个使用以下内容进行屏幕刮擦的iPhone应用程序:
使用YQL,您可以通过对DOM使用XPATH查询从Web获取所需的任何信息。
我个人认为它比使用Regex要好得多。然后我再次只知道非常简单的正则表达式。