检查MediaWiki页面是否存在(Python)

4
我正在编写一个Python脚本,将其转换为:
foo
bar

变成这个:

[[Component foo]]
[[bar]]

脚本会检查每行输入是否存在页面“组件 foo”。如果存在,则创建到该页面的链接,如果不存在,则创建直接链接。
问题是我需要一种快速且廉价的方法来检查许多维基页面是否存在。我不想(尝试)下载所有“组件”页面。
我已经想出了一个手动快速解决方式:编辑一个新的维基页面,将所有的“组件”链接粘贴到页面中,预览后保存所得到的预览 HTML 页面。结果HTML文件对于现有页面和不存在页面包含了不同的链接。
那么重新表述我的问题:如何在Python中保存MediaWiki预览页面?
(我没有本地访问数据库。)

由于页面存储在数据库中,您必须以某种方式访问它。 由于您没有本地访问API,建议使用它-但也可能有其他选择。 http://www.mwusers.com/forums/forum.php 似乎是针对此类问题的最佳场所。我曾经在这个论坛上看到需要对Mediawiki的内部有深入了解的问题被迅速而全面地回答。 - MickeyfAgain_BeforeExitOfSO
4个回答

10

你可以通过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=""属性,如上所示。您还可以检查是否有invalid属性,以确保安全。

现在,您可以使用喜爱的XML分析器来检查这些属性并作出相应的反应。

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


1
其他Python框架可以在此处找到:http://www.mediawiki.org/wiki/API:Client_code;我偏好的是:https://github.com/ianweller/python-simplemediawiki - Gregg Lind

5
使用Pywikibot与MediaWiki软件进行交互。它可能是当前最强大的机器人框架。 Python Wikipediabot FrameworkpywikipediaPyWikipediaBot)是一组工具,可自动化处理MediaWiki网站上的工作。最初为维基百科设计,现在在维基媒体基金会的项目以及许多其他MediaWiki维基站点中使用。它使用免费跨平台编程语言Python编写。本页面提供了针对希望使用机器人软件的人们的一般信息链接。

2
如果您可以访问wiki数据库,最简单的方法是对数据库进行查询,以查看每个页面是否存在。
如果只有HTTP访问权限,则可以尝试使用机械化库,该库允许您以编程方式自动执行需要浏览器完成的任务。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接