ほんじゃらねっと

ダイエット中プログラマのブログ

lxmlで日本語のWebページのタイトルを取得する

日本語が化けて大変苦労したのでメモ。
結論として、XML(またはHTML)を解析する前にunicode関数に通しておく、
ということで良いのかな?
相変わらず文字コード関連はよく分からない。

from urllib import urlopen
from lxml import etree
html = urlopen("http://b.hatena.ne.jp")
charset = html.headers.getparam('charset')
html_data = unicode(html.read(),charset)
et = etree.fromstring(html_data, parser=etree.HTMLParser())
title_element = et.xpath("./head/title")[0]
title = title_element.text.encode("utf-8")
print title # UTF-8に変換されたタイトルが出力される


どうやら上記の使い方はencoding宣言付きのXMLではうまくいかないみたい。
その場合は、unicode変換をしなければうまくいった。
うむむ。