HTMLパース完全ガイド!初心者も分かりやすい解説とサンプルコード10選

HTMLパースの基本を学ぶイメージHTML
この記事は約7分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、HTMLパースの基本から応用までを理解し、実践できるようになります。

●HTMLパースとは?

HTMLパースとは、HTML文書を解析し、プログラムで扱いやすい形式に変換することです。

ウェブスクレイピングやウェブページの分析に欠かせない技術です。

●HTMLパースの基本

○HTMLパースの目的

HTMLパースの主な目的は、ウェブページから特定の情報を抽出したり、ウェブページの構造を分析することです。

また、ウェブページをカスタマイズする際にも利用されます。

○HTMLパースの仕組み

HTMLパースは、HTMLのタグや属性を解析し、木構造(DOMツリー)に変換することで、プログラムで扱いやすくなります。

この変換を行うために、JavaScriptやPythonなどのプログラミング言語と、それに対応するライブラリが使用されます。

●HTMLパースの作り方とサンプルコード

○JavaScriptを使ったHTMLパース

JavaScriptでは、DOMParserを使ってHTMLをパースすることができます。

下記はサンプルコードです。

const htmlString = `
  <div>
    <h1>タイトル</h1>
    <p>本文です。</p>
  </div>
`;

const parser = new DOMParser();
const doc = parser.parseFromString(htmlString, "text/html");

console.log(doc.querySelector("h1").textContent); // "タイトル"
console.log(doc.querySelector("p").textContent); // "本文です。"

○Pythonを使ったHTMLパース

Pythonでは、BeautifulSoupというライブラリを使ってHTMLをパースすることができます。

from bs4 import BeautifulSoup

html_string = """
  <div>
    <h1>タイトル</h1>
    <p>本文です。</p>
  </div>
"""

soup = BeautifulSoup(html_string, "html.parser")

print(soup.find("h1").text)  # "タイトル"
print(soup.find("p").text)   # "本文です。"

●HTMLパースの使い方

○ウェブスクレイピングでの応用

HTMLパースはウェブスクレイピングにおいて重要な役割を果たします。

ウェブページから特定の情報を抽出する際に、HTMLパースを使ってデータを取得します。

例えば、あるニュースサイトから記事のタイトルや投稿日時を抽出したい場合、HTMLパースを用いて取得します。

下記はJavaScriptでのサンプルコードです。

const axios = require("axios");
const { JSDOM } = require("jsdom");

async function fetchNewsTitles() {
  const response = await axios.get("https://example.com/news");
  const dom = new JSDOM(response.data);
  const titles = [...dom.window.document.querySelectorAll(".news-title")].map(
    (title) => title.textContent
  );
  console.log(titles);
}

fetchNewsTitles();

○ウェブページの分析

ウェブページの構造やコンテンツを分析する際にも、HTMLパースが利用されます。

例えば、ウェブページのリンク構造を調べたい場合、HTMLパースを用いてリンク情報を取得できます。

下記はPythonでのサンプルコードです。

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

links = [a["href"] for a in soup.find_all("a", href=True)]
print(links)

●HTMLパースの対処法と注意点

○エンコーディングに関する注意点

HTMLパースを行う際には、文字エンコーディングに注意が必要です。

異なるエンコーディングのHTMLをパースしようとすると、文字化けや解析エラーが発生することがあります。

HTMLを取得する際に、適切なエンコーディングを指定することが重要です。

○ウェブページ構造の変更への対応

ウェブページの構造が変更されると、HTMLパースによって取得していたデータが正しく取得できなくなることがあります。

そのため、パース対象のウェブページが変更された場合には、プログラムを修正して対応する必要があります。

●HTMLパースのカスタマイズ

○データ抽出のカスタマイズ

HTMLパースを行う際に、特定の条件に一致するデータのみを抽出するようにカスタマイズすることができます。

例えば、あるウェブサイトから価格が一定範囲内の商品情報のみを抽出したい場合、HTMLパースをカスタマイズして対応することが可能です。

○タグの操作によるカスタマイズ

HTMLパースを用いて、ウェブページのタグを操作することもできます。

例えば、特定のタグを削除したり、属性を変更したりすることが可能です。

これにより、ウェブページをカスタマイズしたり、解析しやすい形式に変換することができます。

●応用例とサンプルコード

○ニュースサイトからの情報抽出

ニュースサイトから記事のタイトルや投稿日を抽出する例です。

下記はPythonでのサンプルコードです。

import requests
from bs4 import BeautifulSoup

response = requests.get("https://example.com/news")
soup = BeautifulSoup(response.text, "html.parser")

titles = [h1.text for h1 in soup.find_all("h1", class_="article-title")]
dates = [time.text for time in soup.find_all("time", class_="article-date")]

print(titles)
print(dates)

○商品価格の抽出と比較

複数のウェブサイトから商品価格を抽出し、比較する例です。

下記はJavaScriptでのサンプルコードです。

const axios = require("axios");
const { JSDOM } = require("jsdom");

async function fetchProductPrices(urls) {
  const prices = [];

  for (const url of urls) {
    const response = await axios.get(url);
    const dom = new JSDOM(response.data);
    const price = parseFloat(
      dom.window.document.querySelector(".product-price").textContent
    );
    prices.push(price);
  }

  return prices;
}

(async () => {
  const urls = [
    "https://example1.com/product",
    "https://example2.com/product",
    "https://example3.com/product",
  ];

  const prices = await fetchProductPrices(urls);
  console.log(prices);

  const minPrice = Math.min(...prices);
  console.log(`最安値: ${minPrice}`);
})();

まとめ

この記事を読めば、HTMLパースの基本的な作り方、使い方、対処法、注意点、カスタマイズ方法を理解し、実践的な応用例を試すことができるようになります。

HTMLパースを活用して、ウェブスクレイピングやウェブページ分析を行い、自分のプロジェクトに役立てましょう。