我目前正在開發一個wiki,並將繼續在wiki中發佈信息。但是,我必須使用Python代碼從wiki中獲取信息。例如,如果我有一個關於公司的維基頁面,比如說可口可樂,我需要將所有我發佈在wiki上的信息(文本)解析到我的python程序中。請讓我知道是否有辦法做到這一點。從Wiki獲取數據
謝謝!
我目前正在開發一個wiki,並將繼續在wiki中發佈信息。但是,我必須使用Python代碼從wiki中獲取信息。例如,如果我有一個關於公司的維基頁面,比如說可口可樂,我需要將所有我發佈在wiki上的信息(文本)解析到我的python程序中。請讓我知道是否有辦法做到這一點。從Wiki獲取數據
謝謝!
一種方式是使用urllib或httplib下載頁面,然後使用正則表達式分析它以提取所需的精確信息。這可能很長,但相對容易。
也許還有其他解決方案來分析頁面的來源,解析器或類似的東西;我對他們不夠了解。
您可以使用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的一部分。
在過去,對於這類事情我已經使用SemanticMediawiki,並發現它工作得相當好。這不是非常靈活,但如果你做了一些複雜的事情,你會發現自己編寫自定義插件或委託外部服務來完成這項工作。
我最終寫了很多python web服務來做額外的處理。