はじめに
Wikipediaのデータを、VitualBoxで立ち上げたCentOS7のMySQLに入れてみました。
クローラーでのコンテンツの取得は禁じられているので、要注意です。
Wikipedia:データベースダウンロード - Wikipedia
クローラを用いてコンテンツを収集しないでください。
その代わり、Wikipediaのデータは圧縮されたXMLファイルで提供されています。
ここでは、そのデータを取り込む方法を書いていきます。
ただし、DBに格納されるデータは、MediaWiki形式で書かれた文字列なので、そのまま他に流用は厳しいです。
(ということがわかりました)
作業の流れ
上記の通り、このXMLのファイルを取り込むのですが、そのためのPHPファイルも提供されています。
Wikipedia:データベースダウンロード - Wikipedia
これらのXMLファイルをMySQLデータベースにインポートするには、MediaWiki配布物に含まれるimportDump.phpスクリプトを使用します。
$ bunzip2 -c pages-articles.xml.bz2 | php maintenance/importDump.php
コマンドを叩くだけなら簡単、と思いますが…これを動かすには、最終的には「LocalSettings.php」というファイルが必要です。
このファイルには、主にDBへの接続情報が書かれています。
接続情報なしにデータベースにはデータを入れることはできないで、当たり前といえばそれまでですが。
そしてその「LocalSettings.php」は、MediaWikiのインストールの過程で作成されるものです。
つまり…
- Wikipediaのシステムの元であるMediaWikiを仮想環境にインストールし、
- その上でWikipediaのデータをimportさせる。
必要があるということです。ちょっと遠回り。
日本語のデータについては、こちらに入っています。
Index of /jawiki/
XML形式のファイルで、UTF-8です。
欲しいデータはWkipediaのごく一部のページでも、どこにあるかはわかりづらくなっています。
記事が入っているデータは、
Index of /jawiki/latest/
jawiki-latest-pages-articles.xml.bz2
これになります。圧縮された状態で2.8GBくらいありますね。
分割されたデータもあり、それは
jawiki-latest-pages-articles1.xml.bz2
jawiki-latest-pages-articles2.xml.bz2
jawiki-latest-pages-articles3.xml.bz2
...
のように連番になっています。
データを取り込むには?
Wikipedia:データベースダウンロード - Wikipedia
上にも書きましたが、下記コマンドを実行することを目指します。
$ bunzip2 -c pages-articles.xml.bz2 | php maintenance/importDump.php
データを取り込むまでに必要な準備
bzip2のインストール
人によっては入っていないと思いますので、まずはここから…。
CentOSならyumですぐにインストールできます。
$ sudo yum search bzip2
$ sudo yum install bzip2.x86_64
$ bzip2 -V
bzip2, a block-sorting file compressor. Version 1.0.6, 6-Sept-2010.
Copyright (C) 1996-2010 by Julian Seward.
This program is free software; you can redistribute it and/or modify
it under the terms set out in the LICENSE file, which is included
in the bzip2-1.0.6 source distribution.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
LICENSE file for more details.
bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.
解凍時は、こんなふうに使います。
特別難しいことはありません。
$ bunzip2 jawiki-latest-pages-articles.xml.bz2
記事のダウンロード
$ curl -O https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
importData.php のダウンロード
といいますか、MediaWikiのソースコードのダウンロードです。
importData.phpは、MediaWikiのソースコード内にある maintenance/importData.php
です。
メンテナンスツールの一部なのでしょう。
今回はgit cloneで入手します。
MediaWiki · mediawiki
$ git clone https://phabricator.wikimedia.org/source/mediawiki.git
この時点で試しに実行
私が実行したときは、書かれたコマンドの準備ができたということで、(LocalSettings.phpはないものの)実行してみたのでした。
そうしましたら、
$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
Error: You are missing some external dependencies.
MediaWiki now also has some external dependencies that need to be installed
via composer or from a separate git repo. Please see
https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries
for help on installing the required components.
私の場合「LocalSettings.php」がないという以外のエラーが出ました。
「いくつかの外部依存が足りていない。MediaWikiはいくつかの外部依存が必要で、それはcomposerで取ってくるか、gitから取ってきてくれ。詳しくはこのURLを見てね(超意訳)」
とのことなので、URL先を見てみる。
やり方はcomposerを使うか、gitで落としてきてもいいらしい。
composerがなかったので、私はgitで取得することにしました。
vendor/のダウンロード
MediaWikiの vendor/
ディレクトリをgit cloneしてくるだけなので楽です。
$ cd mediawiki/
$ git clone https://gerrit.wikimedia.org/r/p/mediawiki/vendor.git
そして改めて実行するわけですが、
$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
Error: Missing one or more required components of PHP.
You are missing a required extension to PHP that MediaWiki needs.
Please install:
* xml <https://secure.php.net/xml>
Errorが出ましたが、私の場合はPHPのモジュールとしてのxmlがインストールされてませんでした。
人によって足りないものが異なるでしょうから、一度実行してみるのがよいと思います。
ここは他のサイトに説明を譲ります。
そして再実行
$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
A copy of your installation's LocalSettings.php
must exist and be readable in the source directory.
Use --conf to specify it.
ここで「LocalSettings.php」が必要だと言われます。
冒頭に書いたとおり、ここで諦めてMediaWikiをインストールして、その過程で生成しようと思います。
ということで、まずはMediaWikiをブラウザから見れるように、ソースコードをドキュメントルートに持っていきます。
私の場合、ホームディレクトリに置いていたので移動します。
下記にアクセスして、
http://localhost:8080/mediawiki/index.php
下記の画面が表示されれば、いったん成功になります。
こんなエラーがCentOSで出る場合はSELinux関連の可能性があります。
[Sun Dec 16 23:21:25.810925 2018] [:error] [pid 12818] [client 10.0.2.2:60328] PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
[Sun Dec 16 23:21:25.810984 2018] [:error] [pid 12818] [client 10.0.2.2:60328] PHP Fatal error: Unknown: Failed opening required '/var/www/html/mediawiki/index.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0
長い。道のりが長くて記事を分割したくなりますが、まだタイトルに行き着いていないのでがんばります。
基本的にはポチポチクリックして進めていきます。
ここは日本語そのままでよいでしょう。
ここでDBの接続情報、ユーザーの情報を入れます。
MySQLなので、ストレージエンジンの選択を行います。
データ取得が目的なので、私の場合は何でもよかったです。
飽きたので、とにかくインストールしてもらいます。
これでインストールが完了します。
ここでようやく、LocalSettings.phpをゲットできます。
ようやく実行
$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
したのですが…
私の環境では3日経ってもimportが終わりませんでした…
(メモリ8G、Core i5(第8世代)のノートPC)
Wikipediaのデータ量、恐るべし。
私のときは、下記エラーがたくさんできるので、設定しておいたほうが無難かも、です。
PHP Notice: Undefined index: SERVER_NAME in /var/www/html/mediawiki/includes/GlobalFunctions.php on line 1374
もうひとつのやり方?
xml2sqlを使う手段もあるそうですが、どうやら非推奨のようです。
Data dumps/xml2sql - Meta
最後に
次はデータベースの中身の話ですが…
長くなるので、続きは別記事で。
以上でした!