タグ

ブックマーク / taichino.com (4)

  • Pythonで実行時間とメモリの測定をする – taichino.com

    しばらくベンチマークコードを書いてなくてすっかり忘れていたので、メモ書きです。今回は例題として、yahooのこのページをBeautifulSoupとlxmlでのスクレイピング比較をしてみる事にしました。比較対象の関数は以下の通りです。どちらのコードも入力・出力ともに同じなので、どちらが実行時間やメモリ使用量が少ないのかを知りたくなりますね。 # BeautifulSoup def scrape_with_bs(html): from BeautifulSoup import BeautifulSoup soup = BeautifulSoup(html) rows = soup.find('table', attrs={'class':'channel9'}).findAll('tr') channels = rows[0].findAll('td', attrs={'class':'st

  • pythonでtwitterのStreaming APIを使ってみた – taichino.com

    twitterのように更新頻度が高いサービスのAPIはポーリングとあまり相性がよくありません。どうせtwitter API使うプログラム書くなら、リアルタイムなイベントベースっぽいAPIの方が色々と都合が良いので調べてみました。なんとなくXMPPに対応してる気がしてたんですが、実際はStreaming APIという独自のインターフェースが用意されていました。 Streaming API自体はただのHTTPリクエストで、リクエストのコネクションを張りっぱなしにして、都度データが流れてくる様な形になります。見るからに相性が良さそうなのでgeneratorで書いてみました。この例では幾つか種類があるStreaming APIの中からfilterを使っています。 #!/usr/bin/python # -*- coding: utf-8 -*- import sys import base64 i

  • Pythonでいろんなバイナリファイルを覗いてみる – taichino.com

    プログラマをしていると、ちょくちょくバイナリデータから情報を読みたくなりますね。そんな時は、ブツブツ言いながらバイナリエディタと睨めっこすることになるわけですが、これが結構大変なので、何とか楽にならないかなぁと思って探していると、hachoirというナイスなpythonモジュールが見つかりました。このモジュールを使うとバイナリデータをパースして様々なデータを取得できます。かなり多くのデータフォーマットに対応している(現時点で70種類)のが素晴らしいです。 hachoirはいくつかのモジュールに分かれているのですが、大抵は以下をインストールすれば良いと思います。 $ easy_install hachoir_parser $ easy_install hachoir_metadata このモジュールにはhachoir-metadataというコマンドラインツールが含まれていて、コードを書かなく

  • Pythonのジェネレータを保存したいという話 – taichino.com

    Pythonでも所謂ジェネレータを使えます。無限数列を求めたりする例がよく紹介されていますね。 #!/usr/bin/python # -*- coding: utf-8 -*- def get_fib(): (a, b) = (0, 1) yield a yield b while True: (a, b) = (b, a + b) yield b def main(): fib = get_fib() for i in range(10): print fib.next() if __name__ == '__main__': main() ジェネレータはnext()を呼ぶ度に新しい値を返す訳ですが、例えば5回next()を呼んでからジェネレータ自身を保存して置いて、後から6回目以降を呼び出したいというのがエントリでの話です。 要はジェネレータオブジェクトを(デ)シリアライズしたいの

  • 1