ADVERTISEMENT

【Googleスプレッドシート】HTML要素を直接抽出!IMPORTXMLでh1や表の取込

【Googleスプレッドシート】HTML要素を直接抽出!IMPORTXMLでh1や表の取込
🛡️ 超解決

Webページから特定の要素だけをスプレッドシートに取り込みたいと思ったことはありませんか。例えば、他サイトの見出しや表データを定期的に取得して分析したい場合、手動でコピーペーストするのは非効率です。GoogleスプレッドシートのIMPORTXML関数を使えば、HTML内の任意の要素をXPathで指定して直接抽出できます。この記事では、IMPORTXML関数を使ってh1タグや表データを取得する具体的な方法を解説します。

【要点】IMPORTXMLでh1や表を抽出する3つのポイント

  • IMPORTXML関数の基本構文: =IMPORTXML(URL, XPath) で指定したURLのHTML要素を取得できます。XPathで抽出対象を正確に指定することが重要です。
  • h1タグの抽出: XPathに “//h1” と指定することで、ページ内のすべてのh1見出しを取得します。複数ある場合は縦に並んで表示されます。
  • 表データの抽出: XPathに “//table” や “//tr” などを組み合わせて、表全体や特定の行・列を取得できます。HTMLの構造を確認しながらXPathを調整します。

ADVERTISEMENT

IMPORTXML関数でHTML要素を抽出する仕組み

IMPORTXML関数は、指定したURLのWebページに対してXPathクエリを実行し、マッチする要素のテキストや属性値をセルに取り込みます。IMPORTXMLはHTMLを解析するため、静的なページであればほぼ全ての要素を抽出できます。ただし、JavaScriptで動的に生成される要素には対応していません。その場合は別の方法を検討する必要があります。XPathの知識が少し必要ですが、基本的な構文は数パターン覚えれば十分です。

IMPORTXMLはIMPORTHTMLと似ていますが、IMPORTHTMLは表(

)とリスト(

    /

      )のみに特化しているのに対し、IMPORTXMLは任意の要素を取得できる汎用性が魅力です。例えば、h1タグや特定のクラス名を持つdivなども抽出できます。

      IMPORTXMLでh1タグを抽出する手順

      基本的なXPathの指定方法

      h1タグを抽出するには、XPathとして “//h1” を使用します。// はドキュメント内の任意の位置にあるh1要素をすべて選択します。特定のh1に絞りたい場合は、idやclassを指定する必要があります。また、テキスト内容を取得したい場合は、text() 関数を使うか、要素のテキストノードを取得するXPathにします。

      実際の手順

      1. 抽出したいWebページのURLを確認します
        まずは、取得したいHTML要素が含まれているページのURLをコピーします。URLは絶対パスで指定してください。
      2. スプレッドシートにIMPORTXML関数を入力します
        任意のセルに「=IMPORTXML(“URL”, “//h1”)」と入力します。URLは引用符で囲み、XPathも引用符で囲みます。例えば、例示用のページとして「https://example.com」とします。
      3. Enterキーを押して結果を確認します
        関数を実行すると、抽出されたh1タグのテキストがセルに表示されます。複数のh1がある場合は、縦方向に自動的に範囲が拡張されます。
      4. 必要に応じてXPathを調整します
        特定のh1だけを取得したい場合は、属性を指定します。例えば、id=”title”のh1を取得するには「//h1[@id=’title’]」とします。また、テキストノードではなくhref属性を取得したい場合は「//h1/a/@href」などとします。

      IMPORTXMLで表データを抽出する手順

      表全体を取得するXPath

      表データを抽出する最も簡単な方法は、XPathに “//table” を指定することです。IMPORTXMLは表を複数のセルに展開せず、表全体を1つの文字列として返す場合があります。その場合は、表の各行や各セルを個別に取得する必要があります。

      特定の行や列を取得するXPath

      1. 表の行を取得します
        「//table/tr」で表内のすべての行を取得できます。各行は1つのセルに連結されて表示されることがあります。
      2. 各セルを個別に取得します
        セル単位で取得するには「//table//td」または「//table//th」とします。これで全てのセルが縦に並びます。元の表の構造を維持したい場合は、TRANSPOSE関数と組み合わせるか、複数のIMPORTXML関数で列ごとに取得します。
      3. 特定の列を抽出します
        例えば、2列目のセルだけを取得するには「//table//td[position()=2]」や「//table/tr/td[2]」のようなXPathを指定します。ただし、IMPORTXMLは複数の行に対してこのXPathを適用すると、各行の2列目を順番に抽出します。

      実際のHTML構造は複雑な場合が多いため、ブラウザの開発者ツールで確認しながらXPathを構築することをおすすめします。また、IMPORTXMLは一度に大量のデータを取得すると読み込みに時間がかかる場合があります。

      ADVERTISEMENT

      IMPORTXML使用時の注意点とトラブルシューティング

      抽出結果が空になる場合

      XPathが間違っているか、対象の要素が動的生成である可能性があります。まずは簡単なXPath(“//h1″など)でテストし、要素が存在するか確認します。また、URLが正しいか、引用符の有無も確認してください。動的な要素にはIMPORTXMLは対応していないため、代替としてGoogle Apps ScriptのUrlFetchAppを検討します。

      権限やアクセス制限の問題

      IMPORTXMLは一般公開されているWebページに対してのみ機能します。ログインが必要なページや、robots.txtでクロールを拒否しているサイトからはデータを取得できません。また、同一サイトへの連続アクセスはレート制限を受ける可能性があるため注意が必要です。

      IMPORTHTMLとの使い分け

      表やリストだけを取得する場合はIMPORTHTMLの方が簡単です。IMPORTHTMLは「=IMPORTHTML(URL, “table”, 1)」のように、クエリとインデックスで指定できるため、XPathを覚える必要がありません。IMPORTXMLは任意の要素に対応できる反面、XPathの知識が必須です。

      IMPORTXMLとIMPORTHTMLの違い

項目 IMPORTXML IMPORTHTML
抽出可能な要素 任意のHTML要素(h1, div, tableなど) 表(table)とリスト(ul/ol)のみ
指定方法 XPath(クエリ文字列) クエリ種類とインデックス番号
学習コスト 高い(XPathの理解が必要) 低い(直感的な指定が可能)
表データの整形 基本的に生のHTMLがそのまま返る 自動的に行列に展開される

用途に応じて使い分けると効率的です。例えば、表をきれいな形で取得したいならIMPORTHTML、見出しや特定のdiv内テキストを取得したいならIMPORTXMLを選択します。

まとめ

IMPORTXML関数を使うことで、Webページからh1タグや表データを直接スプレッドシートに取り込めるようになります。XPathの指定は最初は難しいかもしれませんが、基本的なパターン(//タグ名、属性指定)を覚えれば応用範囲が広がります。まずはサンプルサイトで試してみて、徐々に複雑な構造を扱ってみてください。また、IMPORTHTMLとの違いを理解して、状況に応じて最適な関数を選びましょう。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。