我正在研究一个改变它的Python脚本:
foo
bar
进入这个:
[[Component foo]]
[[bar]]
脚本检查(每个输入行)是否存在“Component foo”页面。如果它存在,则创建指向该页面的链接,如果它不存在,则创建直接链接。
问题是我需要一个快速的&检查是否存在大量维基页面的便宜方法。我不想(尝试)下载所有“组件”页面。
我已经想出了一种快速的方法:手动执行此操作:编辑新的Wiki页面。将所有“组件”链接粘贴到页面中,按预览,然后保存生成的预览HTML页面。生成的HTML文件包含现有页面的链接,而不是不存在的页面。
所以重新解释一下我的问题:如何在Python中保存mediawiki预览页面?
(我没有对数据库的本地访问权。)
答案 0 :(得分:9)
您绝对可以使用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>
不存在的页面将显示在此处,但它们具有缺少的“”“属性集,如上所示。您还可以检查保存方面的无效属性。
现在,您可以使用自己喜欢的xml解析器来检查这些属性并做出相应的反应。
答案 1 :(得分:5)
使用Pywikibot与MediaWiki软件进行交互。它可能是最强大的机器人框架。
Python Wikipediabot Framework ( pywikipedia 或 PyWikipediaBot )是一个 在MediaWiki网站上自动化工作的工具集合。本来 专为维基百科而设计,现在用于整个维基媒体 基金会的项目和许多其他MediaWiki wiki。它是写的 在Python中,这是一种免费的跨平台编程语言。这个 页面提供了想要使用的人的一般信息的链接 机器人软件。
答案 2 :(得分:2)
如果您可以本地访问wiki数据库,则最简单的方法是对数据库进行查询,以查看每个页面是否存在。
如果您只有HTTP访问权限,则可以尝试mechanize库,它允许您以编程方式自动执行原本需要浏览器的任务。
答案 3 :(得分:1)
您应该可以使用MediaWiki API。 http://www.mediawiki.org/wiki/API(可能在查询或创建/编辑下)
我不太熟悉它,但是例如,您可以将现有页面的输出与不存在的页面进行比较。
http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Bill_Gates&rvprop=timestamp
答案 4 :(得分:0)
由于页面存储在数据库中,因此您必须以这种或那种方式访问。由于您没有本地访问API,正如所建议的那样,可能是它 - 但可能有其他选择。
http://www.mwusers.com/forums/forum.php
似乎是这样的问题的地方。我看到了一些问题需要对mediawiki的内部知识进行快速而全面的回答。