2011-02-24 63 views
0

我目前正在开发一个wiki,并将继续在wiki中发布信息。但是,我必须使用Python代码从wiki中获取信息。例如,如果我有一个关于公司的维基页面,比如说可口可乐,我需要将所有我发布在wiki上的信息(文本)解析到我的python程序中。请让我知道是否有办法做到这一点。从Wiki获取数据

谢谢!

回答

1

一种方式是使用urllib或httplib下载页面,然后使用正则表达式分析它以提取所需的精确信息。这可能很长,但相对容易。

也许还有其他解决方案来分析页面的来源,解析器或类似的东西;我对他们不够了解。

2

您可以使用api.php来获取维基百科源文本。它只包含实际的文章。

我已经写了这个德国维基百科,所以它适用于变音符号。其他一些语言的某些特殊字符不起作用(俄语作品,所以它可能是一些亚洲语言)。这是一个工作示例:

import urllib2 
from BeautifulSoup import BeautifulStoneSoup 
import xml.sax.saxutils 

def load(lemma, language="en", format="xml"): 
    """ Get the Wikipedia Source Text (not the HTML source code) 

     format:xml,json, ... 
     language:en, de, ... 

     Returns None if page doesn't exist 
    """ 
    url  = 'http://' + language + '.wikipedia.org/w/api.php' + \ 
       '?action=query&format=' + format + \ 
       '&prop=revisions&rvprop=content' + \ 
       '&titles=' + lemma 
    request = urllib2.Request(url) 
    handle = urllib2.urlopen(request) 
    text  = handle.read() 
    if format == 'xml': 
     soup = BeautifulStoneSoup(text) 
     rev = soup.rev 
     if rev != None: 
      text = unicode(rev.contents[0]) 
      text = xml.sax.saxutils.unescape(text) 
     else: 
      return None 
    return text 

print load("Coca-Cola") 

如果你想了解你必须更改URL,并与BeautifulStoneSoup部分实际的源代码。

BeautifulStoneSoup解析XML,BeautifulSoup解析HTML。两者都是the BeautifulSoup package的一部分。

0

在过去,对于这类事情我已经使用SemanticMediawiki,并发现它工作得相当好。这不是非常灵活,但如果你做了一些复杂的事情,你会发现自己编写自定义插件或委托外部服务来完成这项工作。

我最终写了很多python web服务来做额外的处理。