我目前正在开发一个wiki,并会不断向wiki发布信息。但是,我将不得不使用python代码从wiki中获取信息。例如,如果我有一个关于公司的维基页面,比如可口可乐,我将需要我在维基上发布的所有信息(文本)都要解析为我的python程序。如果有办法,请告诉我。
谢谢!
答案 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服务来进行额外的处理。