如何从MediaWiki的所有页面导出文本?

时间:2011-07-18 22:05:26

标签: export mediawiki

我有一个MediaWiki运行,它代表德语术语的字典及其对当地方言的翻译。每个页面包含一个术语,其翻译和一些额外的信息。

现在,对于字典的可打印版本,我需要完整导出所有术语及其翻译。由于这是页面内容的摘录,我想我需要以可解析的格式完整导出其最新版本中的所有页面,例如xml或csv。

有没有人这样做或者能指出我的工具? 我应该提一下,我没有对服务器的完全访问权限,例如没有命令行,但我可以添加MediaWiki扩展或访问MySQL数据库。

7 个答案:

答案 0 :(得分:4)

您可以直接从数据库导出页面内容。它将是原始的wiki标记,就像使用Special:Export时一样。但是导出脚本会更容易,而且您不需要确保所有页面都属于某种特殊类别。

以下是一个例子:

SELECT page_title, page_touched, old_text
FROM revision,page,text
WHERE revision.rev_id=page.page_latest
AND text.old_id=revision.rev_text_id;

如果你的wiki使用Postgresql,表“text”被命名为“pagecontent”,你可能需要指定架构。在这种情况下,相同的查询将是:

SET search_path TO mediawiki,public;

SELECT page_title, page_touched, old_text 
FROM revision,page,pagecontent
WHERE revision.rev_id=page.page_latest
AND pagecontent.old_id=revision.rev_text_id;

答案 1 :(得分:2)

这对我来说非常有效。请注意,我将输出重定向到文件backup.xml。从Windows命令处理器(CMD.exe)提示符:

cd \PATH_TO_YOUR_WIKI_INSTALLATION\maintenance
\PATH_OF_PHP.EXE\php dumpBackup.php --full > backup.xml

答案 2 :(得分:1)

我对解决方案并不完全满意,但我最终为所有页面指定了一个公共类别,然后我可以在Special:Export框中添加此类别和所有包含页面名称。它似乎有效,尽管我不确定当我达到几千页时它是否仍然有用。

答案 3 :(得分:1)

导出

cd maintenance
php5 ./dumpBackup.php --current > /path/wiki_dump.xml

导入

cd maintenance
php5 ./importDump.php < /path/wiki_dump.xml

答案 4 :(得分:0)

看起来不那么简单。 http://meta.wikimedia.org/wiki/Help:Export可能会有所帮助,但可能不会。

如果页面的结构都是相同的,那么您可以编写一个类似Scrapy

的网页抓取工具。

答案 5 :(得分:0)

您可以使用特殊页面特殊:导出导出到XML; here is Wikipedia's version

如果您希望最终以人类可读(例如PDF)形式,也可以考虑Extension:Collection

答案 6 :(得分:0)

您可以将 https://www.mediawiki.org/wiki/Manual:$wgExportAllowAll 设置为 true,然后从 Special:Export 导出所有页面。

相关问题