« TortoiseSVNでコミット時にバージョン番号をコードに自動で反映する。 | トップページ | パスワードを忘れた。 »

2012年3月10日 (土)

Pythonでurllib2をつかって日本語サイトから情報フェッチしてみる。

普段Pythonであまり日本語を扱う必要に迫られたことが無いので、たまに使うといつもユニコードどうやって扱うんだっけとか、Shift-JISとかどうすんだ?とか一から調べ直し。つー訳で[1] http://www.evanjones.ca/python-utf8.htmlを参考にしてわかったことを、まとめてメモリーエイドにする。

  1. コードの一行目か二行目に# coding: utf-8を入れておく。コメントになっているがPythonのインタプリタがスクリプトのエンコーディングがなにかをこれをみて確認してくるので、これがないとASCIIとして扱われる。
  2. スクリプトの中で日本語を入れたい場合uをつけてUnicode stringにする。u'日本語ださ'
  3. urllib2で取ってきたバッファ中の文字列を探す場合、サイトのエンコーディングにしたがってデコードする。str型がもつdecodeというメソッドで行う。パラメータは'Shift_JIS'でも'shift-jis'でも同じだったので大文字小文字は区別は気にしないでいいっぽい。
  4. インタプリタのフォントが日本語フォントじゃないと当然化ける。DreamPieなら簡単に変更できる。cmdとかiPythonは知らん。
  5. unicodeから数字にするのはordを使う。PILのソースにはよく下のようにunicodeバッファを色々なデータ型で解釈する関数を定義してある。例は16bitの整数。

def i16(c):
    return ord(c[0]) + (ord(c[1])<<8)

という訳で、習うより慣れろなので具体例としてhttp://www.j-league.or.jpのJ1の全日程のページから、「祝J1記念」として札幌の試合時間を抜き出してみて、今日から一番近い試合まで後何日、何時間あるのかを表示してみた。やっつけなので汚いコードのままですいませんがとりあえず動いたしいいか。Pythonのバージョンは2.7です。

# coding: utf-8

import datetime, urllib2

print u"2012 J1札幌の次の試合時間までどんくらい?"

url = 'http://www.j-league.or.jp/SS/jpn/news/2012010001_W0501_J.html'
buf = urllib2.urlopen(url).readlines()

sapporo = []
fixtures = []
for n, line in enumerate(buf):
    if u">札幌<" in line.decode('Shift_JIS'):
        sapporo.append(n)
    elif u"節" in line.decode('Shift_JIS'):
        fixtures.append(n+1)

start_time = []
for n in sapporo:
    while True:
        n -= 1
        if ':' in buf[n]:
            pos = buf[n].find(":")
            start_time.append(buf[n][pos-2:pos+3])
            break

dates = []
for n in fixtures:
    pos = buf[n].find('+0>') + 3
    dates.append(buf[n][pos:pos+5])

_today = datetime.datetime.today()
for n in range(len(start_time)):
    _month, _day = map( int, dates[n].split('/'))
    _hour, _min = map( int, start_time[n].split(':') )
    delta = datetime.datetime(2012, _month, _day, _hour, _min) - _today
    if datetime.timedelta(0) <= delta < datetime.timedelta(2):
        print u'第%d節 %s %s 試合まで後 %s' % (n+1, dates[n], start_time[n], delta)

« TortoiseSVNでコミット時にバージョン番号をコードに自動で反映する。 | トップページ | パスワードを忘れた。 »

Python」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/44436300

この記事へのトラックバック一覧です: Pythonでurllib2をつかって日本語サイトから情報フェッチしてみる。:

« TortoiseSVNでコミット時にバージョン番号をコードに自動で反映する。 | トップページ | パスワードを忘れた。 »

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

IT技術注目記事

無料ブログはココログ