从Wiki获取数据

时间:2011-02-24 02:21:26

标签: python mediawiki

我目前正在开发一个wiki,并会不断向wiki发布信息。但是,我将不得不使用python代码从wiki中获取信息。例如,如果我有一个关于公司的维基页面,比如可口可乐,我将需要我在维基上发布的所有信息(文本)都要解析为我的python程序。如果有办法,请告诉我。

谢谢!

3 个答案:

答案 0 :(得分: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")

如果您想获得实际的源代码,您必须使用BeautifulStoneSoup更改网址和部分。

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

答案 1 :(得分:1)

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

也许有其他解决方案来分析页面的来源,解析器或类似的东西;我对他们知之甚少。

答案 2 :(得分:0)

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

我最终最终编写了大量的python Web服务来进行额外的处理。