PythonでHTMLを解析(パース)する方法を現役エンジニアが解説【初心者向け】

初心者向けにPythonでHTMLを解析(パース)する方法について現役エンジニアが解説しています。パースとは、一定の規則で記述されたテキストを解析し、プログラムで扱いやすいようなデータに変換する処理のことです。HTMLParserクラスやBeautifulSoupがあります。

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

PythonでHTMLを解析(パース)する方法について解説します。

そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPython講座の内容をもとに紹介しています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PythonでHTMLを解析(パース)する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

HTMLパーサーとは

パーサー(parser)とは、一定の規則で記述されたテキストを解析し、プログラムで扱いやすいようなデータに変換する処理のことです。日本語では「構文解析」と言います。

英語のパース(parse)に由来しており、これは文章を解釈、解析する、といった意味です。特にHTMLパーサーとは、HTML文書をパースする処理のことです。

Webサイトから所望のデータを抽出する際に、頻繁に用いられます。

HTMLParserによる方法

HTMLParserはPythonの標準的なHTMLパーサーです。HTMLの開始タグ、終了タグを発見したり、属性を抽出したりできます。

ソースコード

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("タグ開始:", tag)

    def handle_endtag(self, tag):
        print("タグ終了 :", tag)

    def handle_data(self, data):
        print("その他データ :", data)

parser = MyHTMLParser()
parser.feed('<title>タイトル</title>'
            '<h1>見出し</h1>')

 

実行結果

タグ開始: html
タグ開始: head
タグ開始: title
その他データ : タイトル
タグ終了 : title
タグ終了 : head
タグ開始: body
タグ開始: h1
その他データ : 見出し
タグ終了 : h1
タグ終了 : body
タグ終了 : html

 

解説

HTMLParserクラスを継承し、MyHTMLParserクラスを定義しました。

handle_starttag, handle_endtag, handle_datatagメソッドをオーバーライドしました。タグの開始、終了等にあわせて、これらメソッドが呼び出されます。

MyHTMLParserのインスタンスを作成し、サンプルのHTML文書を入力しました。

[PR] Pythonで挫折しない学習方法を動画で公開中

Beautiful Soupによる方法

Beautiful Soupはサードパーティ製のPythonライブラリで、HTML, XML文書のパースに多用されています。

HTML文書の階層構造を自動的に解析し、データ構造に反映するので、文書中の目的とするデータを容易に取得できます。

ソースコード

from bs4 import BeautifulSoup
html_doc = '<html><head><title>タイトル</title></head><body><h1>見出し</h1></body></html>'
soup = BeautifulSoup(html_doc, 'html.parser')
print('title: ', soup.title.string)
print('h1: ', soup.body.h1.string)

 

実行結果

title:  タイトル
h1:  見出し

 

解説

先と同様のコードをBeautiful Soupで実装した例です。目的のタグ(title, h1)により簡潔にアクセスできることがわかります。

監修してくれたメンター

橋本紘希

システムインテグレータ企業勤務のシステムエンジニア。

開発実績: Javaプログラムを用いた業務用Webアプリケーションや、基幹システム用バッチアプリケーションなどの設計構築試験。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間でPythonを使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。