以下、Mac OS X の場合の説明です。手元環境 Mac OS X 10.8.5 にて実施した手順を記載しています。
前準備
- Google App Engine SDK をインストールし、使える状態にしておく。
- プロジェクトとアプリケーションを作成し、ローカル環境で動作するようにしておく。
- アプリケーションをサーバーにデプロイし、サーバでも動作するようにしておく。なお、このドキュメントでは、以下のようなディレクトリ構成になっているものとします。
必要モジュールをローカルマシンにインストールする
BeautifulSoup4
pip もしくは easy_install 等によりインストールする。
http://kondou.com/BS4/
等を参考に、ローカルマシンのPython実行環境で利用できるようにする。
command例
sudo easy_install beautifulsoup4
html5lib
Python標準のパーサー以外に、サードパーティー製のパーサーを入れておくと、標準でパースできない際に切り替えてパースを試みるので、パースできる可能性が高まる。BeautifulSoupは、lxml parser と、html5lib に対応していますが、GAEでは拡張Cライブラリが使えないという制約があるため、それに依存しているlxml parserは利用できない。よって、html5libを使えるようにする。
beautifulsoup4 と同様に、pip もしくは easy_install 等によりインストールする。
command例
sudo easy_install html5lib
これらの手順により、
/Library/Python/2.7/site-packages/beautifulsoup4-4.3.2-py2.7.egg
/Library/Python/2.7/site-packages/html5lib-1.0b3-py2.7.egg
/Library/Python/2.7/site-packages/six-1.9.0-py2.7.egg
というようなファイルが作成される(バージョン番号の部分はその時の最新のリリースのものに置き換わります)ので、確認しておく。
なお、six-… はファイルではなくディレクトリです。
アプリケーションに組み込む
- アプリケーションのソースコード中に eggs という名前でフォルダを作成する。
- eggsフォルダ内に、beautifulsoup4-4.3.2-py2.7.egg をコピーする。
- 同様に、html5lib-1.0b3-py2.7.egg をコピーする。
- 同様に、six-1.9.0-py2.7.egg をディレクトリごとコピーする。
- app.yaml と同階層に、appengine_config.py というファイルを作成する。内容は以下のようにする。
# -*- coding: utf-8 -*-
import os
import sys
import logging
ROOTPATH = os.path.dirname(__file__)
EGGSPATH = os.path.join(ROOTPATH, 'eggs')
for egg in os.listdir(EGGSPATH):
sys.path.append(os.path.join(EGGSPATH, egg))
アプリケーションでBeautifulSoupを利用してみる
- アプリケーションのソースコードのどこでも良いので、以下のようなコードを記述する。
import logging
import html5lib
from bs4 import BeautifulSoup
soup1 = BeautifulSoup("<html><body><h1>Hello, Beautiful Soup!!(1)</h1></body></html>")
logging.debug(soup1.body.h1.string)
soup2 = BeautifulSoup("<html><body><h1>Hello, Beautiful Soup!!(2)</h1></body></html>")
logging.debug(soup2.body.h1.string)
動作テスト
- ローカル開発サーバでアプリケーションを実行する。上記のコードが動作するようにオペレーションし、以下のような感じでデバッグログが書き込まれればOK。
DEBUG 2015-02-18 03:24:35,268 hoge.py:10] Hello, Beautiful Soup!!(1)
DEBUG 2015-02-18 03:24:47,272 hoge.py:10] Hello, Beautiful Soup!!(2)
- サーバへデプロイし、同様にテストする。(サーバのログは Developers Consoleで見る。)