【问题标题】:Check if a MediaWiki page exists (Python)检查 MediaWiki 页面是否存在 (Python)
【发布时间】:2011-01-27 05:51:50
【问题描述】:

我正在编写一个 Python 脚本来转换它:

foo
bar

进入这个:

[[Component foo]]
[[bar]]

脚本检查(每个输入行)页面“组件 foo”是否存在。如果存在,则创建指向该页面的链接,如果不存在,则创建直接链接。

问题是我需要一种快速且廉价的方法来检查是否存在大量 wiki 页面。我不想(尝试)下载所有“组件”页面。

我已经想出了一个快速的手动方法:编辑一个新的 wiki 页面。将所有“组件”链接粘贴到页面中,按预览,然后保存生成的预览 HTML 页面。生成的 HTML 文件包含现有页面与非现有页面的不同链接。

所以换个说法:如何在 Python 中保存 mediawiki 预览页面?

(我没有对数据库的本地访问权限。)

【问题讨论】:

  • 由于页面存储在数据库中,您将不得不以一种或另一种方式访问​​。由于您没有本地访问权限,因此可能是建议的 API - 但可能有其他选择。 mwusers.com/forums/forum.php 似乎是提出此类问题的地方。我在这个论坛上看到需要深入了解 mediawiki 内部的问题得到快速而全面的回答。

标签: python mediawiki


【解决方案1】:

您绝对可以使用 API 来检查页面是否存在:

# assuming words is a list of words you wish to query for
import urllib

# replace en.wikipedia.org with the address of the wiki you want to access
query = "http://en.wikipedia.org/w/api.php?action=query&titles=%s&format=xml" % "|".join(words)
pages = urllib.urlopen(query)

现在页面将包含这样的 xml:

<?xml version="1.0"?><api><query><pages>

   <page ns="0" title="DOESNOTEXIST" missing="" />

   <page pageid="600799" ns="0" title="FOO" />

   <page pageid="11178" ns="0" title="Foobar" />

</pages></query></api>

不存在的页面将出现在此处,但它们设置了 missing="" 属性,如上所示。您还可以检查无效属性是否在保存端。

现在您可以使用您最喜欢的 xml 解析器来检查这些属性并做出相应的反应。

另请参阅:http://www.mediawiki.org/wiki/API:Query

【讨论】:

【解决方案2】:

使用Pywikibot 与 MediaWiki 软件进行交互。它可能是最强大的机器人框架。

Python Wikipediabot FrameworkpywikipediaPyWikipediaBot)是一个 在 MediaWiki 网站上自动化工作的工具集合。起初 专为 Wikipedia 设计,现已在整个 Wikimedia 中使用 Foundation 的项目和许多其他 MediaWiki wiki。写的 在 Python 中,它是一种免费的跨平台编程语言。这 页面为想要使用的人提供一般信息的链接 机器人软件。

【讨论】:

    【解决方案3】:

    您应该能够使用 MediaWiki API。 http://www.mediawiki.org/wiki/API(可能在查询或创建/编辑下)

    我不太熟悉,但是例如,您可以将现有页面的输出与不存在的页面进行比较。

    http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Bill_Gates&rvprop=timestamp

    http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=NONEXISTENT_PAGE&rvprop=timestamp

    【讨论】:

      【解决方案4】:

      如果您对 wiki 数据库具有本地访问权限,则对数据库进行查询以查看每个页面是否存在可能是最简单的方法。

      如果您只有 HTTP 访问权限,则可以尝试使用 mechanize 库,该库可让您以编程方式自动执行原本需要浏览器的任务。

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        • 2022-12-16
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        相关资源
        最近更新 更多