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

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

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

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ではPythonを使って機械学習の基礎を学ぶPythonオンライン講座を開催しています。

初心者向けの書籍を使って人工知能(AI)や機械学習について学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。