SWIM: 静态维基百科镜像

229 views
Skip to first unread message

Xie Yanbo

unread,
Dec 12, 2007, 8:09:56 AM12/12/07
to zh_wik...@googlegroups.com
花了两天晚上整理了一下,把 Wikipedia offline reader[1] 改成了全部用python实现,
我准备把它做成一个面向普通用户、快速建立维基百科本地镜像的系统。

[1] http://www.softlab.ntua.gr/~ttsiod/buildWikipediaOffline.html

下面是说明文件,目前的目标是能在linux/UNIX上快速、简单建立镜像,然后再制作
windows上安装、运行的版本。

====
SWIM
====
Static WIkipedia Mirror

运行必须的软件
--------------

* Python -- http://www.python.org/
* Xapian -- http://www.xapian.org/
* Django -- http://www.djangoproject.com/
* mwlib -- http://code.pediapress.com/wiki/

可选的软件
----------

* latex
* dvips -- 以上两个软件用来生成数学公式。

运行环境
--------

* Linux/UNIX系统。

配置SWIM
--------

1. 下载SWIM

2. 查看最近的维基百科备份数据库::

$ python swim.py -L

...
2007-11-28 20:10:13 zhwiki/20071119
2007-11-29 13:53:20 zhwikibooks/20071129
2007-11-29 14:07:16 zhwikinews/20071129
2007-11-29 14:17:17 zhwikiquote/20071129
2007-11-29 15:44:00 zhwikisource/20071129
2007-11-30 06:19:55 zhwiktionary/20071130
...

每行为一个数据库的备份时间,以及数据库的备份名称。

3. 下载一个数据库

从上面的列表中选择一个数据库,把名称传给SWIM下载该文件。
例如,下载中文维基百科的备份文件::

$ python swim.py -D zhwiki/20071119

4. 下载完成之后,把备份文件拆分成多个小文件,存放到wiki-splits目录::

$ python swim.py -S -f zhwiki-20071119-pages-articles.xml.bz2 -A wiki-splits

5. 对这些文件进行检索,在目录db中建立起查询数据库::

$ python swim.py -i -A wiki-splits -d db

6. 启动web服务::

$ mkdir -f ~/pngmath # mwlib运行需要这个目录,用来存放数学公式及相应图片
$ cd mywiki
$ python manager runserver

访问 http://127.0.0.1:8000/ 浏览百科条目

TODO
----

* 把配置过程改为向导方式
* 添加维基百科网站的css、img
* 为个人使用提供更简单的web服务,把Django改为备选方案
* 条目链接区分显示已编写、未编写条目
* 中文繁简转换支持
* 制作Windows版本

swim-0.1.tgz

han...@gmail.com

unread,
Dec 12, 2007, 8:25:03 AM12/12/07
to zh_wik...@googlegroups.com
令人敬佩的效率!

能否 ls -l 或du 一下所有檔案的大小, 我猜想應該不大, 但實作才是王道, 就煩
請您提供一下囉

Xie Yanbo

unread,
Dec 12, 2007, 9:29:46 AM12/12/07
to zh_wik...@googlegroups.com
On Dec 12, 2007 9:25 PM, han...@computer.org <han...@gmail.com> wrote:
> 令人敬佩的效率!
>
> 能否 ls -l 或du 一下所有檔案的大小, 我猜想應該不大, 但實作才是王道, 就煩
> 請您提供一下囉

不是太清楚你所讲的档案是那些。我大致说一下整个过程涉及到的文件:

1. Python

现在大多数Linux发布版都已经自带安装了Python,自己编译的话需要下载10M多
一点的源代码包。考虑到以后要做针对windows平台的安装程序,Python不应该
和安装包做到一起,应该让用户单独去下载、安装,安装程序也大约是不到11M。

2. Xapian

这个主要是一个运行库,尺寸不大,大约几百K。这部分尺寸应计入windows安装
程序的包中。

3. Django

最新版本尺寸不到2M。其实针对于用户自用的话,不需要用这么功能丰富的web
服务,我在考虑做一个简单的python web服务,而把Django作为可选的功能,
提供给想建立一个镜像网站的人使用。

4. mwlib

解析mediawiki语法,转换成html,尺寸几十K。

5. latex + dvips

latex比较大,在Linux里,安装基本的功能大概需要一两百兆。Windows下面有
专门的livetex,好像是两三百兆的样子;还有miktex,基本安装也要几十兆。
dvips是生成图片的,livetex之类的工具合集里很多已经包括这些程序。

要做windows的版本,数学公式图片的生成是个问题,要么就要求用户自己去
安装这些latex套件;要么可以把系统做成一个可以在windows里运行的虚拟机,
里面运行一个相关程序、数据齐全的linux系统。各有优缺点,到时候再研究。

以上是系统运行需要的程序。下面说说涉及到的数据文件尺寸:

1. 备份文件

这里需要的维基百科下载的是 zhwiki-20071014-pages-articles.xml.bz2 这样的
备份文件,例子里这个文件的大小是188M,包含了11月4日备份下来的所有
维基百科条目、分类以及模板。

2. 拆分

备份文件太大,很难提取数据,所以需要拆分。在被分割成小文件后,存放于
wiki-splits 目录,这个目录共 219M。

完成拆分之后,下载的备份文件就不再需要,可以删除了。

3. 索引

条目信息被 xapian 索引,存储到 db 目录中,大小 172M。不知道是不是我
做试验时多次添加过信息,这个目录的大小有点出乎意料,按说只索引条目
的名称,索引文件不应该有这么大。

大概就是这些情况。

han...@gmail.com

unread,
Dec 12, 2007, 1:03:20 PM12/12/07
to zh_wik...@googlegroups.com
我原先指的大小是指內容檔,照你的描述全部含索引檔佔400MB以內,是吧?

不過您的方案看來是以架站為主,而個人離線瀏覽為輔,才會有受限於平台的問
題,是吧?

若先不提架站的需求,就個人離線為主的話,是否能將所有的內容檔輸出至html檔
呢,如此直接和firefox搭配就免去顧使用者作業系統的問題,

裝軟體乃推廣的大忌啊

Cao Yi

unread,
Dec 12, 2007, 6:03:11 PM12/12/07
to zh_wik...@googlegroups.com
对啊,虽然装软体是推广大忌,但对于喜欢的人来说,恐怕不在此列,我想可以制作一个光盘安装版,那岂不是更好?

mingli yuan

unread,
Dec 12, 2007, 9:14:07 PM12/12/07
to zh_wik...@googlegroups.com
有劳xyb兄啦!

Xie Yanbo

unread,
Dec 12, 2007, 9:33:45 PM12/12/07
to zh_wik...@googlegroups.com
On Dec 13, 2007 2:03 AM, han...@computer.org <han...@gmail.com> wrote:
> 我原先指的大小是指內容檔,照你的描述全部含索引檔佔400MB以內,是吧?

如果只有最近的中文维基百科条目,大概是这样子。

以后可以考虑同时支持几个不同的维基百科版的条目浏览。

> 不過您的方案看來是以架站為主,而個人離線瀏覽為輔,才會有受限於平台的問
> 題,是吧?

倒不是以架站为主,而是因为要自己使用,就要有查看、浏览、检索的界面。用web
来做这样的界面最简单,只要有任意一个浏览器就可以。否则就得自己开发gui程序,
如果再加上要做到在不同平台上的可移植性,那工程就太庞大了。

> 若先不提架站的需求,就個人離線為主的話,是否能將所有的內容檔輸出至html檔
> 呢,如此直接和firefox搭配就免去顧使用者作業系統的問題,

确实可以如此来做,而且维基百科本身也有html格式的备份文件。但这样的文件的一
个大问题是,检索会成问题,在用户本地的环境里可能效果不太好。另外,因为要
直接浏览,所以所有条目必须以html的格式存放,而且html文件不能压缩起来存储,
这也会很大程度上增大文件占用空间的尺寸,文档的下载或者保存都有可能让用户
吃不消。

> 裝軟體乃推廣的大忌啊

确实,不过如果我们把这个软件尽量做得容易配置和使用,我想还是有很大价值的。

han...@gmail.com

unread,
Dec 13, 2007, 5:50:38 AM12/13/07
to zh_wik...@googlegroups.com
(1) 不會啊,這個大小很好啊,就先中文的啊....

(2) 嗯,Linux/unix的機器架Web server不是問題,但Windows的機器則.....我
全然支持用browser, 只是windows 和linux的預設環境差很大啊

(3) 嗯,都可以試,看是要在Windows上裝一個輕量,綠色安裝的Web server,還
是找一個firefox extension 可以做 local html search的,在地搜尋的確是個問
題,我也找找

Xie Yanbo

unread,
Dec 13, 2007, 6:15:19 AM12/13/07
to zh_wik...@googlegroups.com
On Dec 13, 2007 6:50 PM, han...@computer.org <han...@gmail.com> wrote:
> (1) 不會啊,這個大小很好啊,就先中文的啊....

对,先把中文的做出一个来。

> (2) 嗯,Linux/unix的機器架Web server不是問題,但Windows的機器則.....我
> 全然支持用browser, 只是windows 和linux的預設環境差很大啊

之所以全部工具用python替换掉,就是因为python可以做到的事情非常多,比如
很容易就可以实现一个web服务,而且移植性非常好,同一套代码可以运行在各个
操作系统上。

> (3) 嗯,都可以試,看是要在Windows上裝一個輕量,綠色安裝的Web server,還
> 是找一個firefox extension 可以做 local html search的,在地搜尋的確是個問
> 題,我也找找

依靠python的模块xapian,这个系统本身自带了建立索引的功能,而且检索速度
非常快。但如果依靠windows本身或者firefox做html的本地检索,似乎比较困难。

shi zhao

unread,
Dec 13, 2007, 6:35:06 AM12/13/07
to zh_wik...@googlegroups.com
Xie Yanbo果然是python的大牛!

2007/12/13, Xie Yanbo <xiey...@gmail.com>:


--
Chinese wikipedia: http://zh.wikipedia.org/
My blog: http://talk.blogbus.com
CNBlog: http://blog.cnblog.org/weblog.html
Social Brain: http://www.socialbrain.org
cnbloggercon: http://www.cnbloggercon.org/
MeMedia: http://memedia.cn

[[zh:User:Shizhao]]

Xie Yanbo

unread,
Dec 13, 2007, 6:48:44 AM12/13/07
to zh_wik...@googlegroups.com
On Dec 13, 2007 7:35 PM, shi zhao <shi...@gmail.com> wrote:
> Xie Yanbo果然是python的大牛!

那里,也是借用别人的点子和其他人贡献的代码、模块而已。

如果要发布可以推广的正式版本,那么必须提供windows版本的安装系统,到时
候还是需要发动python社区的朋友来帮忙了,我很久没有动过windows了。

另外,正式发布的版本也必须解决繁简体自动转换、适应的问题,这得花点力气
来做了。

han...@gmail.com

unread,
Dec 13, 2007, 10:04:21 AM12/13/07
to zh_wik...@googlegroups.com
字體轉換可以暫時用firefox的同文堂...

windows的版本我還在找免安裝的小webserver, 不過有點難找

Xie Yanbo

unread,
Dec 13, 2007, 11:24:17 AM12/13/07
to zh_wik...@googlegroups.com
On Dec 13, 2007 11:04 PM, han...@computer.org <han...@gmail.com> wrote:
> 字體轉換可以暫時用firefox的同文堂...

考虑到大多数人使用IE,不能指望firefox来做这件事,繁简转换必须在输出页面时
就做好,这是正式发布版的必须要求。我打算增加一个切换按钮,然后用cookie
记在用户的浏览器中,以后的浏览就不需要再调整了。

han...@gmail.com

unread,
Dec 13, 2007, 11:49:55 AM12/13/07
to zh_wik...@googlegroups.com
firefox是有綠色安裝版,再說若要達到連回Wikipedia並利用TOR繞過障礙的話,
firefox的方案也比較完整,

看重心是放在哪,若只是要離線讀不考慮回wikipedia的話,那直接包成chm選定語
言也行,但個人覺得firefox是應該打包一起推的,因為個人覺得推廣還有包括在
線及貢獻的可能性

shi zhao

unread,
Dec 13, 2007, 7:10:50 PM12/13/07
to zh_wik...@googlegroups.com
可以分步做,先是静态,然后再考虑编辑

2007/12/14, han...@computer.org <han...@gmail.com>:

十字花剑

unread,
Dec 13, 2007, 11:13:43 PM12/13/07
to zh_wik...@googlegroups.com
一旦开始可以编辑,就会被gfw,这基本没悬念

2007/12/14, shi zhao <shi...@gmail.com>:

han...@gmail.com

unread,
Dec 14, 2007, 6:06:56 AM12/14/07
to zh_wik...@googlegroups.com
Firefox+Tor 綠色安裝版,也許就不會....


十字花剑 wrote:
> 一旦开始可以编辑,就会被gfw,这基本没悬念
>

> 2007/12/14, shi zhao <shi...@gmail.com <mailto:shi...@gmail.com>>:
>
> 可以分步做,先是静态,然后再考虑编辑
>
> 2007/12/14, han...@computer.org <mailto:han...@computer.org>
> <han...@gmail.com <mailto:han...@gmail.com>>:
> > firefox是有綠色安裝版,再說若要達到連回Wikipedia並利用TOR繞過障
> 礙的話,
> > firefox的方案也比較完整,
> >
> > 看重心是放在哪,若只是要離線讀不考慮回wikipedia的話,那直接包成
> chm選定語
> > 言也行,但個人覺得firefox是應該打包一起推的,因為個人覺得推廣還


> 有包括在
> > 線及貢獻的可能性
> >
> > Xie Yanbo wrote:
> > > On Dec 13, 2007 11:04 PM, han...@computer.org

> <mailto:han...@computer.org> <han...@gmail.com

Moses

unread,
Dec 15, 2007, 12:21:20 PM12/15/07
to zh_wik...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

H

我已经在电脑上顺利运行起来了 :)

发现一个小错误, 最后一步运行的步骤应该是 python manage.py runserver 应该所笔误了,
另外, 如果我原来有 Apache, 可以把网页内容合并到 Apache 里吗? 应该如何做?


Regards.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: http://firegpg.tuxfamily.org

iD8DBQFHZA0HHuqxyCZQdwkRAp0lAJ40rNj/crC3c3Qzjyk8hwOI/2POVwCggRpe
VHLPvDLx8uC3Oe6B+qEY4zM=
=ZQpv
-----END PGP SIGNATURE-----

--
"I may not agree with what you say but I will defend to the death your
right to say it"

Xie Yanbo

unread,
Dec 30, 2007, 12:23:16 AM12/30/07
to zh_wik...@googlegroups.com
On Dec 16, 2007 1:21 AM, Moses <moses...@gmail.com> wrote:
> 我已经在电脑上顺利运行起来了 :)
>
> 发现一个小错误, 最后一步运行的步骤应该是 python manage.py runserver 应该所笔误了,
> 另外, 如果我原来有 Apache, 可以把网页内容合并到 Apache 里吗? 应该如何做?

抱歉,才看到你的回复。如果有apache,可以用rewrite的方法把swim集成到已有的
网站中。具体方法可以在网上搜索mod_rewrite,资料很丰富。大致是类似这样:

RewriteRule ^/path/to/swim/(.*) http://localhost:8080/$1 [P,L]

Moses

unread,
Dec 30, 2007, 12:57:16 AM12/30/07
to zh_wik...@googlegroups.com
明白, 感谢!

passt...@gmail.com

unread,
May 23, 2018, 3:54:29 AM5/23/18
to zh.wikipedia
谢谢,辛苦了

在 2007年12月12日星期三 UTC+8下午9:09:56,Xie Yanbo写道:
花了两天晚上整理了一下,把 Wikipedia offline reader[1] 改成了全部用python实现,
我准备把它做成一个面向普通用户、快速建立维基百科本地镜像的系统。

[1] http://www.softlab.ntua.gr/~ttsiod/buildWikipediaOffline.html

下面是说明文件,目前的目标是能在linux/UNIX上快速、简单建立镜像,然后再制作
windows上安装、运行的版本。

====
SWIM
====
Static WIkipedia Mirror

运行必须的软件
--------------

* Python -- http://www.python.org/
* Xapian -- http://www.xapian.org/
* Django -- http://www.djangoproject.com/
* mwlib -- http://code.pediapress.com/wiki/

可选的软件
----------

* latex
* dvips -- 以上两个软件用来生成数学公式。

运行环境……

Reply all
Reply to author
Forward
0 new messages