ご注意:
Webサイトの構造は随時変更されるため、チュートリアル内のXPathが突然使えなくなる場合があります。もしそのような状況が発生しましたら、すぐにsupport@octoparse.comテクニカルサポートまでご連絡ください。
確認後、速やかにチュートリアルを更新いたします。
ご協力のほどよろしくお願いいたします。
Webページの情報は、表(テーブル)形式で表示されることがよくあります。たとえば、
お店の情報が表でまとまっている口コミサイト
株価が行ごとに並んでいるランキングページ
このようなページから必要なデータを正確に抽出するためには、XPath を少し工夫して書くことがポイントです。
本記事では、「行見出し」や「列見出し」を手がかりに、テーブル内のデータを正確に指定する方法を、具体例を交えながら解説します。
Octoparseでは、テーブルの行ごとにデータを抽出することが可能です。ただし、別のページ(たとえば同じサイト内の他の店舗ページなど)では、HTMLの構造が微妙に異なることがあり、その結果、正しくデータを取得できなかったり、空白になってしまう場合があります。
この記事では、そうしたケースでXPathをどのように書き換えればよいか、そしてOctoparse上でどのように対応すればよいかを紹介します。
パターン①:「行見出し」でデータを取得する
🎯 目標:ラベルに続くデータをピンポイントで取る
このページには「アクセス」「営業時間」などの見出し(thタグ)と、内容(tdタグ)が対になっています。
🛠 手順:
1) XPathの書き方で紹介した contains(text(),"XXX") を使って「アクセス」を指定する
//th[contains(text(),"アクセス")]
2) XPathの書き方で紹介した following-sibling:: で、そのすぐ後ろにある値を指定
//th[contains(text(),"アクセス")]/following-sibling::td[1]
📌 解説:
following-sibling::td[1] で、「アクセス」という見出しのすぐ右にあるデータを指定しています。
パターン②:「列見出し」でデータを取得する
このようなページでは、各行が企業情報1件分を表し、列に「順位」「コード」「市場」などの情報が並んでいます。
🛠 手順:
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が使えると何が嬉しい?
レイアウトが変わっても柔軟に対応できる
自動化の安定性がぐっと上がる
めんどうな設定がスマートになる
続きを読む



