HTMLParserを使ってページのタイトルを取得

発端

ページのタイトルタグを取る必要があったので、正規表現で書こうかと思ったけど諦めた。理由はtitleタグには改行とかコメントアウトされている可能性があるから。

<title>
タイトルだよー
</title>
---------------------------------------------
<!-- <title>偽タイトル</title> -->
<title>こっちが本物のタイトル</title>

解決策

Python標準ライブラリ内にHTMLパーサのないかなと思って探したらHTMLParserというライブラリが見つかった。これを使いページのタイトルを取得してみた。
下記と同じ物HTMLParserを使ったページタイトルの取得 · GitHub

from HTMLParser import HTMLParser
import urllib2

class GetTitle(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.title_flag = False

    def handle_starttag(self, tag, attrs):
        if tag == 'title':
            self.title_flag = True

    def handle_data(self, data):
        if self.title_flag:
            self.title = data
            self.title_flag = False

def main():
    url = 'http://twitter.com'
    response = urllib2.urlopen(url)
    gt = GetTitle()
    gt.feed(response.read())
    gt.close()
    print '%s - %s' % (url, gt.title)

if __name__ == '__main__':
    main()

結果

取れた!

http://twitter.com - Twitter

参考文献

簡単なHTMLParserについて知れた htmllib.HTMLParserでリンクを抽出 - ひきメモ