Pythonで簡単なウェブスクレイパーを書く

文:Nick Gibson(Builder AU) 翻訳校正:石橋啓一郎
2007-12-17 08:00:00
  • このエントリーをはてなブックマークに追加

 ウェブは畏敬の念を起こさせるほどの情報を持っており、われわれはみな普段はこれにウェブブラウザからアクセスできれば満足している。しかし時には、HTMLのマークアップの細かいことに煩わされずにプログラムからアクセスしたいことがある。

 既に何百もの言語で書かれた何千というHTML(あるいはSGML、あるいはXML)の構文解析ライブラリがあるが、この例ではユーザーのためにほとんどすべての仕事をしてくれる、PythonのBeautifulSoupと呼ばれるライブラリを用いる。BeautifulSoupのライブラリはユーザーが思うがままに使える非常に便利なツールで、構文木を検索して修正する機能だけでなく、一般的なWebページによくあるHTMLの誤りを処理することができる。

 このライブラリはウェブページからダウンロードできる。また、DebianやUbuntuのソフトウェア配布に使われているapt-getレポジトリなど、いくつかの有名なソフトウェアレポジトリにも置かれている。

 ここでは、

タグの中に囲まれている、表示されているテキストをすべて出力するウェブスクレイパーを書いてみる。これは非常に単純な実装で、完全に動かない場合もあるが、このライブラリの使い方の例を示すには十分なはずだ。

 まず、スクレイピングしたいページのソースを読み出す必要がある。次のコードでは、コマンドラインで指定されたアドレスを使い、その中身をhtmlという変数に読み込む。

import urllib2,sys

address = sys.argv[1]

html = urllib2.urlopen(address).read()

 次に、BeautifulSoupを使って構文木を作る。

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(html)

 この時点で、コードは既にBeautifulSoupライブラリによってきれいにされ、Unicodeに変換されており、soup.prettify()を使えばソースコードのきれいなダンプを出力できる。