中山 康弘(なかやまやすひろ)
株式会社DTS所属

 これまで,Pythonによる初めてのコーディングと,RDB(リレーショナル・データベース)をオブジェクトとして扱うデータベース・プログラミングについて簡単に紹介しました。今回は,Pythonを使ってWebの情報を自動取得するスクレイピング・プログラム(WebサイトのHTMLを抽出・解析して情報を取得)の作成にチャレンジしてみましょう。

 ところで前回までは,WindowsからLinux(Ubuntu)にリモートログインして開発をおこなっていました。今回からは一歩踏み込んで,クライアントにMacを採用して本格的な開発の環境を用意してみることにします。

Macを利用する意義

 開発環境をMacにするメリットは以下の通りです。

  • Mac OS XはUNIXであり,UNIX/Linux環境はスクリプト言語の開発に適している
  • 最新のPythonがはじめからインストールされている
  • EmacsやVimなど強力なエディタが存在し,Linux環境とシームレスに連携できる

 現在のMac OS Xは,BSDベースのUNIXです。Mac OS X Leopardは,Single UNIX Specification(SUS:唯一のUNIX仕様)に準拠しているため,正式な「UNIX」として認められています。

 これはすなわち,SUS v3仕様とPOSIX 1003.1仕様に準拠したソースコードを確実に実行できるということを意味しています。このことは,UNIX環境でのアプリケーションを作成するにあたり,メリットとなるでしょう。

 2008年2月20日に発表されたLinux標準仕様の最新版「Linux Standard Base 3.2」(LSB 3.2)では,PerlとともにPythonが新しく仕様に追加されました。これによりPythonは,UNIXクローンであるLinuxの標準仕様の一部として正式に認められました。そのためMac OS XやLinuxといった環境は,スクリプト言語との親和性が高く,Pythonもネイティブでサポートされています。

 Mac OS X Leopardには,Python,Ruby,Perlといった言語が用意されているだけではなく,svkといった分散バージョン管理ツールも搭載されています。また,EasyInstallというパッケージ・ツール(Rubyにおけるgemに相当)も標準搭載しているので,開発に必要なライブラリもコマンド一つですぐに準備することができます。

 したがって,面倒なインストール作業をすることなく,Macを買って来て箱を開ければ,いきなりスクリプト言語による開発を始めることができます。こうした手軽さが,Macとスクリプト言語との相性の良さを象徴していると言えるでしょう。実際,最近では,スクリプト言語を使うオープンソース・ソフトウエア開発者を中心に,MacBookを開発環境に選ぶケースが増えてきているようです。

エディタを用意する

 Javaによる開発では,EclipseやNetBeansといったIDE(統合開発環境)がよく使われていますが,スクリプト言語の開発者の間では,EmacsやVimといったエディタも人気です。Mac OS Xでの開発にあたり,以下のようなものを用意すると便利です。


図1●EmacsおよびVimによるPythonコーディングの様子
図1●EmacsおよびVimによるPythonコーディングの様子
[画像のクリックで拡大表示]

 そのほか,Macであれば,キーマップのカスタマイズ・ソフト「KeyRemap4MacBook」を利用してEmacsに最適なキーバインドを設定したり,「AquaSKK」といった熟練者向けの日本語入力環境も手軽に導入できます。

開発サーバーに接続する

 多くの場合,サーバーの本番環境はUNIXまたはその互換OSなので,MacからUNIXへ接続できる環境を用意しましょう。WindowsではPuTTYというシンプルなSSHクライアントを使いましたが,MacではMacFUSEとsshfsが便利です。これらを使うと,SSHプロトコルを通して,リモートのファイル・システムをあたかもローカルディスクのようにマウントすることができます。

 これにより,接続先が実運用のサーバーである場合はもちろん,接続先のサーバーがそれ以外の環境であっても対応できます。例えば「さくらインターネット」のようなレンタル・サーバーのファイル・システムや,VMwareで起動した仮想環境のファイル・システムでも,マウントしてローカルのファイル・システムと同様に利用することができます。

 MacFUSEとsshfsは,MacPortsというMac用のパッケージ管理ツールで入手することもできますが,下記のサイトからダウンロードすると,GUIで実行できるものが手に入ります。

 ここでは解説のため,VMware上で動作するDebian GNU/Linuxを動作確認のためのテスト環境と見立てて,このファイル・システムをマウントしてみましょう。まずはVMwareの仮想環境でDebianを起動します。

 次に,このファイル・システムをマウントします。その際,あらかじめsshコマンドで正常に宛先のホストに接続できるかを確認しておくと良いでしょう。よくある失敗の例として,SSHのknown_hostsファイルに他の環境の接続情報が残ってしまい,接続を拒否されてしまうことがあります。sshコマンドで接続を試行すれば,失敗した場合でも画面に情報が表示されるので,原因をすぐに把握することができます。

図2●Debian GNU/Linux環境のディレクトリをFinderで開く
図2●Debian GNU/Linux環境のディレクトリをFinderで開く
[画像のクリックで拡大表示]

Windowsでの開発について

 Mac OS XではなくWindowsをクライアントとして利用する場合は,以下のものを利用してほぼ同等の環境を用意することが可能です。

 各ソフトの詳細やインストールの手順については,それぞれのWebサイトを参照してください。

BeautifulSoupを使う

 それでは開発に着手しましょう。Pythonで,Web情報をスクレイピングするにはBeautifulSoupというライブラリを使うと便利です。

図3●BeautifulSoupのオフィシャルWebサイト
図3●BeautifulSoupのオフィシャルWebサイト
[画像のクリックで拡大表示]

 もちろんPythonは,バッテリ付属言語と呼ばれるほど標準ライブラリが充実しているので,標準でHTMLParserというHTML解析モジュールが備わっています。しかし,BeautifulSoupには,多少誤った文法のHTMLでも比較的柔軟に解析でき,特定タグの抽出やソートなどを簡単に行えるという利点があります。

 BeautifulSoupは,ファイル1個のライブラリなので,site-packagesに配置すればインストールは完了です。Linuxの場合は,/usr/lib/python2.5/site-packagesのようなパスになるでしょう。今回はMacなので,以下の通りにライブラリを配置します。

TARGET_PATH=/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
cd $TARGET_PATH
sudo wget http://www.crummy.com/software/BeautifulSoup/download/BeautifulSoup.py

 この後,iPythonを起動してimport BeautifulSoupとタイプし,エラーが表示されなければOKです。