检查MediaWiki页面是否存在(Python)
我正在写一个Python脚本,它的作用是把下面这个:
foo
bar
转换成这个:
[[Component foo]]
[[bar]]
这个脚本会检查每一行输入,看看“Component foo”这个页面是否存在。如果存在,就会创建一个指向那个页面的链接;如果不存在,就会创建一个直接链接。
我现在面临的问题是,我需要一个快速又便宜的方法来检查很多维基页面是否存在。我不想(尝试)下载所有的“Component”页面。
我已经找到了一个手动操作的快速方法:编辑一个新的维基页面,把所有的“component”链接粘贴到这个页面里,点击预览,然后保存生成的预览HTML页面。生成的HTML文件中,存在的页面和不存在的页面的链接是不同的。
所以换句话说,我的问题是:我该如何在Python中保存一个mediawiki的预览页面呢?
(我没有本地访问数据库的权限。)
4 个回答
如果你可以直接访问维基的数据库,最简单的方法就是对数据库进行查询,看看每个页面是否存在。
如果你只能通过HTTP访问,那你可以试试mechanize这个库,它可以让你通过编程来自动完成一些本来需要用浏览器才能做的事情。
使用 Pywikibot 来和 MediaWiki 软件进行互动。这可能是目前最强大的机器人框架。
Python Wikipediabot Framework(也叫pywikipedia或PyWikipediaBot)是一套工具,专门用来自动化处理 MediaWiki 网站上的工作。最开始是为维基百科设计的,现在已经被广泛应用于维基媒体基金会的各种项目以及许多其他 MediaWiki 维基网站。它是用 Python 语言编写的,Python 是一种免费的、跨平台的编程语言。这个页面提供了一些链接,供想要使用这个机器人软件的人参考。
你可以使用这个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解析器来检查这些属性,并根据结果做出相应的处理。