Python mini Hack-a-thon #49に行ってきた
先日、友人の @shinyorke さんに飲み会でお誘いいただいて、Python mini Hack-a-thon #49に行ってきたのでレポート。
- 日時: 2014.12.20 11:00~19:00 (実際の作業時間は11:30~17:30くらい)
- 場所: ビープラウドさん(新宿)
ビープラウドさんはPythonの受託開発や、イベントサイトのconnpassでもお馴染みの会社さんですね。
注: 生まれてはじめてPythonを触ったのでいろいろ誤りがあるかもです
環境構築
OSXでPython環境を整える
brewでpythonをインストール
brewで入れるので以下を実行
$ brew update $ brew upgrade $ brew install fontforge --use-gcc --without-python $ brew install python
brew upgrade
でFontForgeとXQuartzのエラーが出たのでXQuartzをインストールして、brew install fontforge --use-gcc --without-python
して、リトライして成功
パッケージ管理pipのインストール
インストールしたらPATHを追加
# python export PATH=/usr/local/bin:$PATH export PATH=/usr/local/share/python:$PATH
pipのインストール
$ curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
とりあえず、ここまででお昼へ。
virtualenvのインストール
Pythonの実行環境を仮想的に作れて、「ローカルマシンを汚さなくて済むので、学習ならこれ良いのでは」とPythonistaの方に教わったので、pipでインストール。
$ pip install virtualenv
Flask
Rubyで言うところのSinatra的存在と聞いたので、Flaskを使ってチュートリアルしながら、カンタンなWebアプリを作る。
仮想環境
virtualenvを使って仮想環境を作る
$ cd hogehoge # 適当な作業ディレクトリに移動 $ virtualenv env $ source env/bin/activate
これで、カレントディレクトリに env
というディレクトリが作られて、シェル上に (env)
という「仮想環境で動いてるよ」的なサインが出る
Flaskチュートリアル
- まずはHello, world
- カンタンなDBアクセス
- www.ikyu.com のコンテンツをスクレイピングして表示するアプリ
といった感じでやってみる。
Hello, world Flask
まずはFlaskのインストール
(env)$ pip install flask ........ # ログがゲロゲロ出て、flaskがインストールされる (env)$ touch hello.py (env)$ vim hello.py
hello.pyには下記のように書く
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "hello world" if __name__ == '__main__': app.run()
- flaskをインポート
- appインスタンス作る
- route書く
- このモジュールがmainで実行された場合の
if __name__ == '__main__':
にはappインスタンスをローカルサーバ(デフォルトは localhost:5000)で実行する
という感じです。
書いたら、実行して、ブラウザで http://localhost:5000/
を開いて、hello worldが表示されれば :ok: です
(env)$ python hello.py * Running on http://127.0.0.1:5000/ 127.0.0.1 - - [20/Dec/2014 14:29:44] "GET / HTTP/1.1" 200 -
Tutorial
Flaskチュートリアルをひたすらやるだけ。
ひと通り書いたら、動かしてみてentriesにデータができてるトコを確認。
(env)$ python flaskr.py * Running on http://127.0.0.1:5000/ * Restarting with reloader 127.0.0.1 - - [20/Dec/2014 16:14:19] "GET /logout HTTP/1.1" 302 - 127.0.0.1 - - [20/Dec/2014 16:14:19] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [20/Dec/2014 16:14:20] "GET /login HTTP/1.1" 200 - 127.0.0.1 - - [20/Dec/2014 16:14:31] "POST /login HTTP/1.1" 302 - 127.0.0.1 - - [20/Dec/2014 16:14:31] "GET / HTTP/1.1" 200 -
起動出来てます
Webからデータの登録も出来ていて
SQLite側からも確認できています。
ここまでで夕方16:20..あと1hちょい。時間がねー!!
BeautifulSoup
install
pipでインストール
(env)$ pip install beautifulsoup
(トレーニング) 一休.comのタグをいくつかとってFlaskアプリで表示する
def show_ikyu(): url = 'http://www.ikyu.com/' html = urllib.urlopen(url).read() soup = BeautifulSoup(html) return "title: " + soup.find('h1').string
美女をスクレイピングする
いつぞやの開発合宿でNode.jsでチャレンジしたときと同じく、美女暦から美女をスクレイピングしようと試みるもここで無念のタイムアップ。美女を取得できず。。5時間くらいの作業時間で
までを実施。もうちょいやりたかった...
所感
- 新しい言語楽しい
- 書き方戸惑うとこあるけど、まぁなんとか読める
- virtualenv便利
- ちょっと試す程度なら、virtualenv便利ですね @shinyorke ありがとうございます
- pip
- 最近の言語では当たり前になりましたが、エコシステムが発達していてカンタンにモジュールが追加できるのは便利
- Framework
- Flask
- SinatraライクでカンタンにWebアプリ作れる
- 便利なんだが、Latest release(v0.10.1)が2013/06で止まってるのがちょっと気になる
- BeautifulSoup
- 時間足らなかったので、ノーコメント
- スキル不足と準備不足
- 環境くらいは作ってこようと思っていたが、結局来てから作った
- 時間かかりすぎ..orz
- 次回も参加したい
参考
環境構築
- OSXにPythonをインストールする
- Mac OS X Lion / homebrew にて python の環境を整える
- Installing pip on Mac OS X
- VirtualEnvについて