【Python/HtmlParser】HTML解析(パース)

Python3の標準ライブラリ「HtmlParser」を用いて、HTML解析(パース)する方法とソースコードについて紹介します。

HTML解析(パース)

HTML解析(パース)とは、HTML文の中身を解析して必要な情報を取り出すことです。
Python3では、標準ライブラリ「HtmlParser」を用いて行うことができます。
インターネット上やローカルのHTMLファイルにアクセスするには、標準ライブラリ「urllib」を使います。

ソースコード(Python3)

サンプルプログラムのソースコードです。

# -*- coding: utf-8
import urllib.request
import html.parser as hp

# HTMLParserを継承したクラスを定義
class Parser(hp.HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("開始タグ :", tag, attrs)
    def handle_endtag(self, tag):
        print("終了タグ :", tag)
    def handle_data(self, data):
        print("データ:", data)
    def handle_comment(self, comment):
        print("コメント:", comment)

def main():
    # 取得先URL
    url = "https://algorithm.joho.info/" 
 
    # HTMLファイルを開く
    data = urllib.request.urlopen(url)
    
    # HTMLの取得      
    html = data.read()
    html = html.decode('utf-8')

    # HTML解析(タイトルタグの値取得)     
    parser = Parser()
    parser.feed(html)
    
    # 終了処理
    parser.close()
    data.close()

    
if __name__ == "__main__":
    main()
処理手順と内容
開始タグがあればhandle_starttagメソッド呼び出し
終了タグがあればandle_endtagメソッド呼び出し
タグ内にデータがあればhandle_dataメソッドで処理
タグ内にデータがあればhandle_commentメソッドで処理
①~④を繰り返し行います

サンプルプログラムの実行結果は下記の通りです。(長いので一部抜粋)
このように、HTML内の各タグの情報を切り分けて取得できます。

開始タグ : li [('id', 'menu-item-181'), ('class', 'menu-item menu-item-type-taxonomy menu-item-object-category menu-item-181')]
開始タグ : a [('href', 'https://algorithm.joho.info/category/robotics/')]
データ: ロボット工学
終了タグ : a
終了タグ : li

HTML解析入門

HTML解析のライブラリとその使い方について以下に整理しました。

ライブラリ 項目
urllib HTML取得, HTML取得(日本語), User-Agent設定, 日本語含むURL
htmlparser サイトタイトル取得
関連記事
1 PythonでHTML解析(パース)
2 Python入門 サンプル集
関連記事