Wikipediaをスクレイピングするなら、ダンプデータを利用しよう
スポンサーリンク
Wikipediaのデータを使って有名人の出身地一覧を作りたいと思った。 しかし、Wikipediaは公式ではクローラによるスクレイピングを禁止しているとのこと。
参考: Wikipedia:データベースダウンロード - Wikipedia
その代わり、Wikipediaのダンプデータを入手することができるサイトがあるので、それを使う。 また、ダンプデータはそのままだと検索などで記事ゲットが困難なので、mysqlに入れる。
流れ
- mysqlの設定
- xml2sqlのインストール
- ダンプデータの入手
- データをmysqlに入れる
- 確認
結構手順があるけど、先人のブログのおかげでほとんど躓かずに済みました!
最初に注意
※ダンプデータ自体はmediawiki記法で書かれている。このままだとスクレイピングが難しいので、 htmlに変換します。そのへんはおいおい書いていきます。
※ダンプデータすべてダウンロードすると、2GB強あります。帯域制限食らってると時間かかる!
※mysqlがインストールされている前提です!
mysqlの設定
データをmysqlに入れる時、文字化けが発生Σ(´∀`;) みなさんはこうならないように、mysqlのエンコード設定をやっておきましょう。
データベースのデフォルト文字コードをUTF-8に変更する。
文字コードの確認はmysqlにログイン後、mysql -uroot
以下で。
show variables like "chara%";
+--------------------------+--------------------------------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql-5.6.19-osx10.7-x86_64/share/charsets/ | +--------------------------+--------------------------------------------------------+
確認すると、以下のように綺麗なutf8になっていればOK. 特に、character-set-serverとcharacter_set_connectionがutf8になっているかチェックしよう。 自分の場合、これらがlatinとなっていて文字化けした。
なっていなければ設定が必要。
以下、mysqlの設定ファイル(my.cnf
)で文字コードをutf8に設定する。OSによって場所が違う。
自分のOSXでは、/usr/local/mysql/my.cnf
。
CentOSでは、/etc/my.cnf
。
viコマンドで編集。管理者権限が必要なのでsudoする。
sudo vi /usr/local/mysql/my.cnf
以下のように設定。
`[mysqld] ... character-set-server=utf8 #mysqldセクションの末尾に追加 [client] default-character-set=utf8 #clientセクションを追加
設定後、再起動。
※OSXの場合、私はシステム環境設定からmysqlのサーバ再起動してますが、多分、 brewで入れた人はやり方が違うと思われます。
その後、再確認。
show variables like "chara%";
綺麗にutf8になっていたらOK!
参考: mysqlで文字コードをutf8にセットする - Qiita
xml2sqlのインストール
まず、Wikipediaのデータをmysqlにいれるために、xmlをsqlに変換するxml2sqlをインストール。
wget http://ftp.tietew.jp/pub/wikipedia/xml2sql-0.5.tar.gz tar xvfz xml2sql-0.5.tar.gz cd xml2sql-0.5 ./configure make sudo make install
ダンプデータの入手
次に、データの入手。ページ本文含めての場合はjawiki-latest-pages-articles.xml.bz2
。
これが2GB位ある。bzip2で解凍もしておく。
※注意として、4分割されたバージョンのファイルもあるけど、あとあと結合が面倒だったりする。
wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
bzip2 -d jawiki-latest-pages-articles.xml.bz2
データを以下コマンドで変換。 変換に16分かかった。
cat jawiki-latest-pages-articles.xml | sed -e 's/<dbname>.*<\/dbname>//' -e 's/<ns>.*<\/ns>//' -e 's/<parentid>.*<\/parentid>//' -e 's/<sha1>.*<\/sha1>//' -e 's/<model>.*<\/model>//' -e 's/<format>.*<\/format>//' -e 's/<redirect>.*<\/redirect>//' -e 's/<redirect.*\/>//' | xml2sql
データをmysqlに入れる
sqlのテーブル定義がmediawikiにあるので入手。
wget https://releases.wikimedia.org/mediawiki/1.26/mediawiki-1.26.2.tar.gz tar xvfz mediawiki-1.26.2.tar.gz
mysqlがわでWikipedia用のデータベースを作成。
mysql -uroot
で入って、
create database mwiki;
でデータベースを作成。データベース名をmwiki
とした。
まず、テーブル定義を入れる。
mysql -uroot mwiki < mediawiki-1.26.2/maintenance/tables.sql
続いて、データを入れる。これは、かなり時間がかかる。コーヒーを入れて、気長に待とう。
mysqlimport --fields-terminated-by="\t" --default-character-set=utf8 -uroot -dLp mwiki page.txt mysqlimport --fields-terminated-by="\t" --default-character-set=utf8 -uroot -dLp mwiki text.txt mysqlimport --fields-terminated-by="\t" --default-character-set=utf8 -uroot -dLp mwiki revision.txt
最後に
データが入っているか確認する。 mysqlに入って、以下のコマンドでとりあえず行数を見てみる。
show table status from mwiki;
mwikiのテーブル一覧と、各テーブルの行数が見れる。 さらに、pageが文字化けしていないか中身チェック。
select * from mwiki.page limit 2;
文字化けしてなければOK!
参考:
- 意識低い感じで Elasticsearch に Wikipedia のデータを流し込む - Qiita
- Wikipediaにある表から必要なデータを取り出すまで。 - Qiita
- WikipediaのダンプデータをDBに投入する | Tokyo O life
- How to import Wikipedia Data dumps to MySQL - 俺はそんなにやる気ない
終わりに
今回は長かった。これなら特定のページだけhtmlダウンロードすればいいのでは?とも感じるけど、データが手元にあれば今後いろいろできて楽しいよね、 と自分に言い聞かせる。。。
次回、htmlへの変換を書きます!
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
- 作者: るびきち,佐々木拓郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/08/25
- メディア: 大型本
- この商品を含むブログ (8件) を見る