从维基百科文章提取第一段(Python)

43 投票
10 回答
51929 浏览
提问于 2025-04-16 08:37

我怎么用Python提取维基百科文章的第一段呢?

比如说,对于阿尔伯特·爱因斯坦,第一段内容是:

阿尔伯特·爱因斯坦(发音为/ˈælbərt ˈaɪnstaɪn/;德语:[ˈalbɐt ˈaɪnʃtaɪn](听));1879年3月14日 – 1955年4月18日)是一位理论物理学家、哲学家和作家,被广泛认为是历史上最具影响力和标志性的科学家之一。他是一位德瑞混血的诺贝尔奖得主,常常被视为现代物理学的奠基人。爱因斯坦于1921年获得诺贝尔物理学奖,表彰他在理论物理学方面的贡献,特别是他发现的光电效应定律。

10 个回答

14

维基百科使用了一种叫做MediaWiki的扩展,它提供了一个API模块,可以实现你想要的功能。这个叫做TextExtracts的扩展,能够通过action=query&prop=extracts这个请求,返回前N句话和/或仅仅是文章的介绍,格式可以是HTML或者纯文本。

你可以尝试下面这个API调用: https://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Albert%20Einstein&exintro=&exsentences=2&explaintext=&redirects=&formatversion=2

  • action=query&prop=extracts是用来请求这些信息的。
  • (ex)sentences=2, (ex)intro=, (ex)plaintext这些是模块的参数(可以查看第一个链接的API文档),意思是请求从介绍中获取两句纯文本;如果想要HTML格式,可以不写后面的参数。
  • redirects=(true)表示如果你请求“titles=Einstein”,你会得到阿尔伯特·爱因斯坦页面的信息。
  • formatversion=2可以让返回的数据格式更干净,使用UTF-8编码。

有很多库可以帮助你调用MediaWiki的API,比如DGund的回答中提到的那个,但其实自己调用API也并不难。

搜索结果中的页面信息讨论了如何获取这个文本提取,以及如何获取文章的描述和主图像。

54

我写了一个Python库,目的是让这个过程变得非常简单。你可以在Github上查看它。

要安装这个库,你只需要运行

$ pip install wikipedia

然后,如果你想获取一篇文章的第一段,只需使用 wikipedia.summary 函数。

>>> import wikipedia
>>> print wikipedia.summary("Albert Einstein", sentences=2)

这会输出

阿尔伯特·爱因斯坦(/ˈælbərt ˈaɪnstaɪn/;德语:[ˈalbɐt ˈaɪnʃtaɪn](收听);1879年3月14日 – 1955年4月18日)是一位出生于德国的理论物理学家,他提出了广义相对论,这是现代物理学的两个支柱之一(另一个是量子力学)。虽然他因质量与能量等价公式E=mc²而最为人知(这个公式被称为“世界上最著名的方程”),但他在1921年获得诺贝尔物理学奖“以表彰他对理论物理学的贡献,特别是他对光电效应法则的发现”。

至于它是如何工作的,wikipedia会向MediaWiki API的移动前端扩展发送请求,这样就能返回适合手机阅读的维基百科文章版本。具体来说,通过传递参数prop=extracts&exsectionformat=plain,MediaWiki的服务器会解析维基文本,并返回你请求的文章的纯文本摘要,甚至包括整篇页面的文本。它还接受excharsexsentences这两个参数,顾名思义,这两个参数用来限制API返回的字符数和句子数。

45

之前我写了两个类,用来获取维基百科的文章并把它们转换成简单的文本格式。我知道这不是最好的解决方案,但你可以根据自己的需要进行调整:

    wikipedia.py
    wiki2plain.py

你可以这样使用它:

from wikipedia import Wikipedia
from wiki2plain import Wiki2Plain

lang = 'simple'
wiki = Wikipedia(lang)

try:
    raw = wiki.article('Uruguay')
except:
    raw = None

if raw:
    wiki2plain = Wiki2Plain(raw)
    content = wiki2plain.text

撰写回答