从 Wiki 获取数据

问题描述 投票:0回答:4

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

谢谢!

python mediawiki
4个回答
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。两者都是 BeautifulSoup 包的一部分。


1
投票

一种方式是使用 urllib 或 httplib 下载页面,然后使用正则表达式对其进行分析,以提取您想要的精确信息。虽然可能很长,但是相对容易做到。

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


0
投票

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

我最终编写了很多 Python Web 服务来进行额外的处理。


0
投票

--> 从 Wikipedia API 检索给定文章标题的数据

function fetchWikiData($a){ 
  $URL = "https://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=" . urlencode($a) . "&rvprop=content&origin=*";
  $response = file_get_contents($URL); return $response 
}
© www.soinside.com 2019 - 2024. All rights reserved.