すべてのコレクション
インテグレーション
Xpathと正規表現
XPath応用編 - 2.テーブルデータを指定する
XPath応用編 - 2.テーブルデータを指定する
一週間前以上前にアップデートされました

一部のWebページではテーブルでコンテンツを表示しています。例えば、

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

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

    mceclip2.png

Octoparseで行ごとにデータを抽出することはもちろんできますが、WebサイトのHTML構造が変わることで、違ったデータを取得したり、データが空白になったりする場合があると思います。

そのような場合にXPathをどのように書き直し、それからOctoparseでどう解決するかを紹介します。

1.行見出し

https://www.hotpepper.jp/strJ001259626/

今度はアクセスの後ろにくるテキストを指定します。

mceclip0.png

a) まずは「ブランド」をクリックします。それに応じて以下のHTMLと表示されます。

click-to-open.gif
mceclip1.png

b) XPathの書き方で紹介した「contains(text(),"XXX")」を使って「アクセス」を指定すると、下記のように書くことができます。

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

c) それから、XPathの書き方で紹介したfollowing-sibling::で次のテキストを指定することができます。

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

following-sibling::td[1]はth[contains(text(),"アクセス")]と同じ階層で、その後にくる1番目のtd要素を指定する意味です。

d) 上記のXPathをOctoparseのデータフィールドのXPath入力ボックスに入れ替えます。

2.列見出し

例:https://finance.yahoo.co.jp/stocks/ranking/up?market=all&term=daily

下記のようなテーブルは複数の列で行ごとにデータを表示しています。

このようなサイトでは列数に変化はなく、行数に増えたり減ったりする変化があります。

今度は指定した行目と列目のデータを取得するXPathの書き方を説明します。

mceclip2.png

a) まずは順位に「1」のところを確認します。tr属性のところにマウスを移動すれば、一行目の内容を指定することができます。それに応じて以下のHTMLと表示されます。

table.gif

b) 他の行目もすべてtr属性で記述されています。tr属性で指定すると、すべての行を指定できます。XPathを下記のように書くことができます。

//tr[@class="WRru9z7J"]

一行目を指定したい場合はXPathを下記のように書くことができます。

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

c) 各行を指定する上記のXPathをOctoparseのループアイテムのXPath入力ボックスに入れ替えます。

d) それから、列目を指定します。例えば、1列目の「順位」を指定したい場合はXPathを下記のように書くことができます。

//tr[@class="WRru9z7J"]/th

1列目はtr要素の下にくる1番目のth要素です。そのため、trの下にあるthを指定すれば、「順位」列を指定できます。

table.gif

2列目の「コード」と「市場」を指定する場合はXPathもそれぞれ下記のように書くことができます。

//tr[@class="WRru9z7J"]/td[1]//tr[@class="WRru9z7J"]/td[2]

e) 各行を指定する上記のXPathをOctoparseのデータフィールドの相対XPath入力ボックスに入れます。

続きを読む

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