2009-10-27 217 views
5

我想知道是否有任何现有的库或从Objective-C访问,可以让我刮格式化像this one。具体而言,每个日期旁边的所有日期和所有文本。如果没有,那么最好的方法是什么呢?常用表达?我听说NSString可能已经有内置的方法。这是真的?刮和解析维基百科页面

我正在四处寻找,看看是否有其他替代方法,如XML文件或API。我确实找到了一个API,但我看到的唯一客户端是使用其他语言的,他们似乎只能将内容发布到页面,而不是检索它。

编辑:所以我发现关于这些链接的API的更多信息:

,我能够拿出this request返回一些HTML编码的文本(格式是XML,但它包括页面的文本,如»a href=等我会继续浏览文档,看看我能不能如果不是这样,这会更好一些,有没有解析这个的建议?

编辑2:好吧,所以拜this doc page,我已经能够检索数据最简单和干净的方法是使用这个constructed link返回原始数据(在维基标记)的相关部分的。但是,我想我需要解析一下,但如果真的如此,它应该比整篇文章容易得多。

有没有人有任何解析wiki标记的建议,如Objective-C中的以下内容?

==Events== 
* [[710]] – [[Saracen]] invasion of [[Sardinia]]. 
*[[1275]] – Traditional founding of the city of [[Amsterdam]]. 
*[[1682]] – [[Philadelphia]], [[Pennsylvania]] is founded. 

我想最终拥有的是什么,我想一个NSDictionary或类似的集合,将日期存储与信息伴随片断。谢谢!

回答

1

我打算推荐在混合HTML数据流中提供针对性数据提取的正则表达式。

手机上已经有RegEx库,它们虽然隐藏起来,但您可以使用RegexKitLite(确保向下滚动并获取灯光版本)进行一些简单的调用来暴露它们。它最终成为一个在NSString上有几个扩展的类,可以让你做正则表达式,然后你可以定义一个带有两个捕获匹配的正则表达式 - 一个用于数字,一个用于内容,还有一些未捕获的匹配封装和中间标签。尽管它是标准RegEX的“精简”版本,它仍然支持任何你需要的功能。

API方法是有前途的,但一旦你得到原始标记,你可能将不得不采取类似的正则表达式来解析数据。如果它减少正则表达式的复杂性和数据传输时间,它仍然可能是合理的,没有理由不能将两种方法结合起来。

+0

谢谢你,我欣赏它。我认为我要走的路(我能看到这样做的唯一途径)是获取原始数据,然后以某种方式解析它。我已经包含了上述数据的一个例子,但我很可能会为此创建一个新问题。 – 2009-10-27 21:49:17

+0

新数据更容易解析 - 我会通过查找在事件之后开始的字符串范围来处理该数据,然后对括号内的纯数字进行匹配,以及ndash之后的任何内容直到行尾。那么你只需要去除所有的“[”和“]”字符,你就会全部设置好。虽然超级链接很重,但比HTML更容易处理。 – 2009-10-28 01:27:38

+0

谢谢,你是否介意回答我关于解析的后续问题? http://stackoverflow.com/questions/1634012/how-to-parse-some-wiki-markup谢谢! – 2009-10-29 15:47:17

0

这绝对不是以任何语言表达的方式。

如果任何网站在线将以一种很好的方式公开他们的数据,它将是维基百科。

考虑以XML,RDF或甚至JSON的形式获取文章。

+0

这就是我所要求的,如果有什么办法以一种很好的格式检索数据,但它看起来并不像我看到的那样。 – 2009-10-27 20:23:52

3

鉴于维基百科上的页面以明文形式存储,并且由用户以明文形式输入,因此您无法从中获取结构化数据集。

4

在您的查询结果中添加&format=fmt,如API:Data_formats所述。例如,您的查询变为:JSON query。您可以指定XML,JSON或许多其他格式。

您可以轻松解析整个部分,然后将HTML格式的输出显示到webview中。

+0

谢谢!是的,我看到了,但返回的文件比我能够检索的原始文件大很多。不足之处在于它使用的是wiki标记而不是HTML,但我没有计划将返回的内容呈现到webview中。我宁愿拥有实际的数据,以便我可以轻松操作其演示文稿。尽管我很欣赏这种回应。 – 2009-10-27 20:54:20

3

我以各种方式从WP中获取大量数据。格式取决于很多事情,包括信息所处的子域的类型以及输入的时间。主要文本是自由格式,并没有简单的方法来刮擦它。信息框是一种特殊的WP格式,多年来一直在变化。它不是为了被刮掉而设计的。

有一个支持WP的数据库,它有点结构化。

到目前为止,最好的策略是联系维基你想刮域 - 他们会了解数据库格式并很可能能够帮助 - 他们肯定会帮助,因为他们将要请参阅WP的语义形式(如DBPedia - http://dbpedia.org/About)。

2

Python计数? ;)从Objective-C可以获得。 而且有很好的模块可以用于刮擦目的:美丽的肥皂和/或机械化,你也可以考虑使用lxml。

0

我有一个iPhone应用程序使用下面这做一个屏幕抓取:

使用YQL你可以通过使用针对DOM的XPATH查询从Web获取所需的任何信息。

我个人认为它比使用正则表达式好得多。然后我只知道很简单的正则表达式。