メインコンテンツにスキップ

XPath応用編 - 2.テーブルデータを指定する

今週アップデートされました

ご注意:

Webサイトの構造は随時変更されるため、チュートリアル内のXPathが突然使えなくなる場合があります。もしそのような状況が発生しましたら、すぐにsupport@octoparse.comテクニカルサポートまでご連絡ください。

確認後、速やかにチュートリアルを更新いたします。

ご協力のほどよろしくお願いいたします。

Webページの情報は、表(テーブル)形式で表示されることがよくあります。たとえば、

  • お店の情報が表でまとまっている口コミサイト

  • 株価が行ごとに並んでいるランキングページ

このようなページから必要なデータを正確に抽出するためには、XPath を少し工夫して書くことがポイントです。
本記事では、「行見出し」や「列見出し」を手がかりに、テーブル内のデータを正確に指定する方法を、具体例を交えながら解説します。

  • 店の詳細を紹介する口コミサイト(列見出し)

  • 株価情報を紹介する株式ランキングサイト(行見出し)

    mceclip2.png

Octoparseでは、テーブルの行ごとにデータを抽出することが可能です。ただし、別のページ(たとえば同じサイト内の他の店舗ページなど)では、HTMLの構造が微妙に異なることがあり、その結果、正しくデータを取得できなかったり、空白になってしまう場合があります。

この記事では、そうしたケースでXPathをどのように書き換えればよいか、そしてOctoparse上でどのように対応すればよいかを紹介します。


パターン①:「行見出し」でデータを取得する

🎯 目標:ラベルに続くデータをピンポイントで取る

このページには「アクセス」「営業時間」などの見出し(thタグ)と、内容(tdタグ)が対になっています。

ブラウザで「検証ツール」を開くと、HTMLが表示されます。

click-to-open.gif

mceclip1.png

🛠 手順:

1) XPathの書き方で紹介した contains(text(),"XXX") を使って「アクセス」を指定する

//th[contains(text(),"アクセス")]

2) XPathの書き方で紹介した following-sibling:: で、そのすぐ後ろにある値を指定

//th[contains(text(),"アクセス")]/following-sibling::td[1]

📌 解説:
following-sibling::td[1] で、「アクセス」という見出しのすぐ右にあるデータを指定しています。


パターン②:「列見出し」でデータを取得する

このようなページでは、各行が企業情報1件分を表し、列に「順位」「コード」「市場」などの情報が並んでいます。

mceclip2.png

🛠 手順:

1) 行を指定(例:すべての行)

//tr[@class="RankingTable__row__1Gwp"]

特定の行だけなら、以下のように数字を指定:

//tr[@class="RankingTable__row__1Gwp"][1]

2) 列を指定(例:順位、コード、市場)

//tr[@class="RankingTable__row__1Gwp"]/th        ← 1列目(順位)
//tr[@class="RankingTable__row__1Gwp"]/td[1] ← 2列目(名称・コード・市場)
//tr[@class="RankingTable__row__1Gwp"]/td[2] ← 3列目(取引値)

3)Octoparseへの入力ポイント

  • 行XPath → ループアイテムの「XPath」欄に

  • 列XPath → データフィールドの「相対XPath」欄に

💡補足ヒント:

  • contains(text(),"xxx") を使うと、部分一致で柔軟に指定できます。

  • following-sibling:: で同階層の次の要素をとれます。

  • テーブル構造が崩れても、近くのテキストを手がかりにすれば安定して取れます。

✨おまけ:XPathが使えると何が嬉しい?

  • レイアウトが変わっても柔軟に対応できる

  • 自動化の安定性がぐっと上がる

  • めんどうな設定がスマートになる

続きを読む

こちらの回答で解決しましたか?