BeautifulSoupが日本語絡みでコケる時の対処法

<meta http-equiv="content-type" content="text/html; charset=euc-jp">

って明示されててもutf-8への(内部自動)コンバートでコケることが多い。
ざっと見た感じでは、丸数字やローマ数字が入ってるとコケる。
で、コケると'windows-1252'に落ちるのですが、そこからdecode、encodeでutf-8にしてやると上手く行く(ようだ)。
metaタグ等の書き換えはやってない。fromEncodingのほうが強い。

    allLines = urllib2.urlopen(url).read()
    s = BeautifulSoup(allLines, fromEncoding="euc-jp")
    if s.originalEncoding == 'windows-1252':
        allLines = allLines.decode('euc-jp', 'ignore').encode('utf-8')
        s = BeautifulSoup(allLines, fromEncoding="utf-8")
        #それでもダメならあきらめる
        if s.originalEncoding == 'windows-1252':
            return False

あと、class名で探索する方法がドキュメントに載ってなかった気がするので、いちおう書いておく。

    rc = s.find('span', {'class':'average'})

idでの探索は

    rc = s.find('span', id='average')

なのにね。

初めてのPython 第3版
初めてのPython 第3版
posted with amazlet at 11.01.31
Mark Lutz
オライリージャパン
売り上げランキング: 38005