PythonでHTMLを解析(パース)する方法を現役エンジニアが解説【初心者向け】
初心者向けにPythonでHTMLを解析(パース)する方法について現役エンジニアが解説しています。パースとは、一定の規則で記述されたテキストを解析し、プログラムで扱いやすいようなデータに変換する処理のことです。HTMLParserクラスやBeautifulSoupがあります。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,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文書を入力しました。
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を使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。