1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GAE/P でBeautifulSoup4を使う

Last updated at Posted at 2015-02-18

以下、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で見る。)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?