2011年8月 Archives

urllib2 と gzip

| No Comments | No TrackBacks

結構どはまりした話題。

とある理由から html で書かれたデータを解析する必要が出てきました。

html を解析する場合、実は結構面倒で何か楽出来ないかな~と思って、いろいろ探していたらBeautifulSoupというとっても便利なライブラリを発見したのですよ。

で、これはラッキー!と思って早速使って組んでみたら、とてもうまく動いてくれてかなり満足していたのですが…とある euc-jp で書かれた html ページがなぜか解析失敗する。

どうも追いかけていくと、euc-jp ではなく、windows-1252 で判別されているっぽい。

ちょっと不思議に思ったので、urllib2 で直接データを取得して…と思ったのがすべての間違い。ここからめちゃくちゃはまってしまいました…まぁ、単純に以下のようにhtmlを取得した(つもり)だったのですが…

import urllib2
fp=urllib2.urlopen('http://どこかの.ページ')
data=fp.read()
fp.close()

なぜか取得したデータが化けている!しかも取得サイズが全然違う。もう、頭の中大混乱でした…

結局一日ぐらいたって、わかったのが…Content-Encoding: gzip なデータは urllib2 で受信した場合、自前で展開しなければならないということ。

無駄にえらい時間を使ってしまった…

ちなみに、当初の BeautifulSoup がエンコードを間違えるのは、euc-jp で変換出来ない文字が使われているから、でした。

この問題も結構面倒だよなぁ……