Pythonでurllib2をつかって日本語サイトから情報フェッチしてみる。
普段Pythonであまり日本語を扱う必要に迫られたことが無いので、たまに使うといつもユニコードどうやって扱うんだっけとか、Shift-JISとかどうすんだ?とか一から調べ直し。つー訳で[1] http://www.evanjones.ca/python-utf8.htmlを参考にしてわかったことを、まとめてメモリーエイドにする。
- コードの一行目か二行目に# coding: utf-8を入れておく。コメントになっているがPythonのインタプリタがスクリプトのエンコーディングがなにかをこれをみて確認してくるので、これがないとASCIIとして扱われる。
- スクリプトの中で日本語を入れたい場合uをつけてUnicode stringにする。u'日本語ださ'
- urllib2で取ってきたバッファ中の文字列を探す場合、サイトのエンコーディングにしたがってデコードする。str型がもつdecodeというメソッドで行う。パラメータは'Shift_JIS'でも'shift-jis'でも同じだったので大文字小文字は区別は気にしないでいいっぽい。
- インタプリタのフォントが日本語フォントじゃないと当然化ける。DreamPieなら簡単に変更できる。cmdとかiPythonは知らん。
- 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])
breakdates = []
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」カテゴリの記事
- Noteの記事をPythonでバックアップしといた。(2021.05.05)
- JupyterLabでも好きな外部エディターを使いたい!(2018.05.02)
- ローカルエリア内のJupyterLabサーバーにLAN経由で接続する。(2018.05.02)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
- Juliaやってみよう。四日目。@timeでプロファイリング(2017.07.16)
« TortoiseSVNでコミット時にバージョン番号をコードに自動で反映する。 | トップページ | パスワードを忘れた。 »
コメント