ラベル Python の投稿を表示しています。 すべての投稿を表示
ラベル Python の投稿を表示しています。 すべての投稿を表示

Google app engine / python で lxml

1.7.0の更新履歴に lxmlのunicodeサポートみたいな事が書いてあった。

つまり、lxmlが使えるようになったらしい。早速使ってみようと思ったらちょっと詰まったのでメモ。

自前でHTMLパーサを作らない場合、BeautifulSoup3くらいしか手軽に導入できるライブラリがない上に

ベンチマークしているサイトの情報によれば、lxmlの方が結構な差が出るくらい早いようなので

これからGAE/PでHTMLやXML解析をしたい人はlxmlを選んだほうがいいかも?


さて、導入方法は、まずPython2.7にする必要があるのと、

app.yamlに以下を追加

libraries:
- name: lxml
version: latest


もし、Python2.7にしたばかりで、app.yamlの設定がまだなら

application: your-app-name
version: 1
runtime: python27
api_version: 1
threadsafe: true

- url: /(.*)
script: main.app

みたいな感じの設定を追加。

この2.7用の設定については別記事参照。

開発環境では、これだけではダメで(本番環境ではまだ試していない)

別途、lxmlをインストールする必要がある。

コマンドでインストールもできるみたいだけど、

面倒くさがりな私は

ちょい古いバージョンでリリースされているインストーラを使って導入した。

インストーラが用意された中で一番最新のバージョンは、

この記事を書いた時点では2.3のものみたい。

http://pypi.python.org/pypi/lxml/2.3

今回WindowsでGAEのPythonも2.7用の設定なので、

下の方にある「lxml-2.3.win32-py2.7.exe (md5)」をDLしてインストールした。

あとは使い方が書いてあるサイトなり、マニュアルなりに書かれた通り

importして使うだけ。

クラスのソート

クラスhogeがvという数値の変数を持っていて、それを元にいくつかのhogeクラスをソートしたい時

a = hoge(2)
b = hoge(1)
c = hoge(3)

list = [a,b,c]

list.sort(lambda x, y: cmp(x.v, y.v))

# list == [b,a,c]

とする

UnicodeEncodeErrorが出る

そんな時は、一度以下を試してみる。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, codecs
sys.stdout = codecs.lookup('utf_8')[-1](sys.stdout)

諸々の意味はググればすぐ出るので、それで思い出す事。