2011-02-24 74 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服務來做額外的處理。