相対XPathを使用してループアイテム外のデータを取得する方法
フォローするこのタイトルの意味がわかりづらいなら、以下の例を見てみましょう!
各地域にはたくさんの都道府県があります。もし、都道府県を抽出する時、所属の地域も抽出したい場合、相対XPathの出番です。
以下は抽出したサンプルです。
XPathはユーザーにとって難しいですが、うまく使えれば、スクレイピングは簡単になります。
例としてこのWebサイトを使います。
https://event.rakuten.co.jp/furusato/area/?l-id=furusato_pc_top_headmenu_area
このページを一見すると、2つのループアイテムで解決することを思いつくかもしれません。
一番目のループでは、地域とその地域に含む都道府県を取得し、2番目のループでは各都道府県の情報を抽出します。
試したところ、上手く抽出できません。
Octoparseは同じページ上の2つのループを検出できないため、2番目のループの値は地域に応じて変化しません。そこで、相対XPathを使います。それでは、抽出する方法を紹介します。
まず、すべての都道府県を取得するループアイテムを作成し、地域と対応する都道府県の位置関係を使用して、地域の値を取得するXPathを記述できます。
ループアイテム(都道府県)のXPathに基づく:
//UL[@id='link-color']/LI/DIV[2]/UL[1]/LI
地域に一致するXPathを記述できます。
//UL[@id='link-color']/LI/DIV[2]/UL[1]/LI/../../../div[1]
相対XPathは、ループアイテムXpathに相対するXPathのマッチングの追加部分です。
/../../../div[1]
ループアイテムのXPathが地域のXPathの一部であることを確認してください。これは、相対XPathとマッチするXPathを接続するための重要なものです。
ヒント! |
そうすると、空白のフィールドを追加し、XPathを入力すれば、地域データが取得されます。
マッチするXPathと相対XPathを入力する方法を次に示します。
ただし、値はまだ空白です。それはデータのフォーマットを設定していないためです。
それを解決するには、「選択した要素のテキストを抽出する」を選択すればOKです。
実行すると、データがきれいに取得されます。