关于搭建wiki镜像和数据库的一些东西

本文详细介绍了如何搭建wiki镜像,包括下载mediawiki,清除数据库,导入XML文件到MySQL数据库。同时,文章还讨论了使用Python处理MySQL数据库时遇到的问题,如DLL加载失败的解决方法,以及在Python 2.6环境下安装MySQLdb库的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:搭建wiki镜像
(1)Apache,Php5,Mysql不可少,然后下载mediawiki软件。
(2)mediawiki直接解压到apache里面,然后进主页去创建数据库wikidb。里面有41个表。在导入数据之间,要先清除page,revision,text三个表。
delete from page;
delete from revision;
delete from text;
(3)http://dumps.wikimedia.org/backup-index.html在这里可以下载任何语言wiki的数据库xml文件。下载的文件类似于enwiki-20061130-pages-articles.xml.bz2(英文版的),wiki差不多每两个月更新一次数据。
(4)把文件导入数据库:
命令:
java -Xmx600M -server -jar mwdumper.jar --format=sql:1.5
enwiki-20061130-pages-articles.xml.bz2 | mysql -u wikiuser -p wikidb
这是linux下的,windows下的对应改一下路径,当然啦,需要mwdumper.jar包
可以在http://dumps.wikimedia.org/tools/ 下载
说明:1.这个xml压缩文件只有最新版本的文件。如果要所有的历史记录应该是类似这样的文件:
enwiki-20061130-pages-meta-history.xml.bz2
2.windows下的命令:
java -jar d:\mwdumper.jar --format=sql:1.5 d:\enwiki-20061130-pages-meta-history.xml.bz2 | c:\mysql\bin\mysql.exe -u root(数据库登录者) -p wikidb(用mediawiki建立的后台数据库名字)


(5)现在,实际上wikidb里面只有三个表有内容,page,revision,text。对于只研究wiki文本已经足够了,本来想画个图简单说明一下这三个表的关系,可是在网上看到了一个关于41表的完整版,连接:http://dl.javaeye.com/upload/attachment/80112/8621bbc1-1ffa-3511-8023-acbe735ac39f.png
当时不知道有这图,分析了半天才搞明白这三个表的关系,总之就是revision表的rev_page对应page表的page_id,revision表的rev_id对应text表的old_id
好啦,现在wiki的镜像搭建好了,可以按自己的要求读取里面的数据啦。
我用的是python2.6
--------------------------------------------------------------------
下面是关于python处理数据库的内容:
需要装MySQLdb
MySQLdb版本: MySQL-python-1.2.2.win32-py2.6.exe
下载地址:http://home.netimperia.com/files/misc/MySQL-python-1.2.2.win32-py2.6.exe
参见:http://sourceforge.net/forum/forum.php?thread_id=2316047&forum_id=70460

常见问题:
1.ImportError: DLL load failed: 找不到指定的模块。
----------------------------------------------------------------------------------------------------
D:\usr\local\Python26>python
Python 2.6 (r26:66721, Oct 2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\usr\local\Python26\Lib\site-packages\MySQLdb\__init__.py", line 19, in <module>

import _mysql
ImportError: DLL load failed: 找不到指定的模块。
----------------------------------------------------------------------------------------------------
解决方法:下载libmmd.dll和libguide40.dll两个dll文件并复制System32目录之下
参见:http://sourceforge.net/forum/message.php?msg_id=5613887

2.ImportError: DLL load failed: 找不到指定的模块。
----------------------------------------------------------------------------------------------------
D:\usr\local\Python26>python
Python 2.6 (r26:66721, Oct 2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
D:\usr\local\Python26\lib\site-packages\MySQLdb\__init__.py:34: DeprecationWarning: the sets module is deprecated
from sets import ImmutableSet
----------------------------------------------------------------------------------------------------
解决方法:
1) 在文件中 "__init__", 注释掉:
from sets import ImmutableSet
class DBAPISet(ImmutableSet):
新增:
class DBAPISet(frozenset)

2) 在文件中"converters.py", 注释掉 from sets import BaseSet, Set 这一句话。

3) 在文件中"converters.py", 修改 "Set" 成为 "set" ( 只有两个地方需要修改):
大概 line 48: return Set([ i for i in s.split(',') if i ]) 》》 return set([ i for i in s.split(',') if i ])
大概 line 128: Set: Set2Str, 》》 set: Set2Str
参见:http://sourceforge.net/forum/message.php?msg_id=5808948
------------------------------------------------------------------------------------------
好啦好啦,然后就是运用MySQLdb包连数据库wikidb,然后用sql语句自己想要的数据,我把读取的数据用python包装成xml。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值