0

ブラウザをWebDriverで制御してるシナリオです。
テーブルから行と列の見出しを指定して値を取得したいです。
そんな XPathを使いたいです。
お知恵を拝借させてください。

 

言い換えると、XPathでテーブルからクロス抽出したいです。
Excelで例えるなら、XLOOKUPの2段重ねやINDEX+MATCH相当を、XPathでスマートに表現したいです。

 

これでできたとかこうすれば良いんじゃない?みたいなズバリ、これとこれを組み合わせれば前進するかもねなヒント、リファレンスサイトとかこれを読め!なナビ、いずれもウェルカムです。

 

「値の取得」「属性値の取得」「プロパティ値の取得」あたりに収まればベストです。
あるいは「表の値取得」を組み合わせざるを得ないでしょうか。

 

リサーチは経たものの、まだあまり試せていません。

 

イメージを伝えるためのExcelのリファレンス

【エクセルのクロス抽出】INDEX関数とMATCH関数の組み合わせ
https://excel-doctor.jp/index-match/

INDEX関数とMATCH関数の組み合わせが最強!わかりやすく使い方を解説
https://raku2life.com/excel-comb-indexmatch/

行と列が交差するセルの値を求める(INDEX関数とMATCH・XMATCH関数) | Excel 2013 | 初心者のためのOffice講座
https://hamachan.info/win8/excel/match.html

【エクセル時短】縦横で交わるデータを取り出す!「クロス抽出」を実現する関数の組み合わせとは? | エクセル時短 | できるネット
https://dekiru.net/article/16178/

(Excel)クロス表からデータを検索・取得する - いきなり答える備忘録
https://www.officeisyours.com/entry/2020/08/15/130614

 

複数条件のVLOOKUP相当の XPathを学んだスレッド

https://winactor.com/questions/question/複数列の条件が合う行の任意セルの操作/

 

今回リサーチした分

https://www.google.com/search?q=XPath+クロス抽出

https://www.google.com/search?q=XPath+表+列番号+取得

https://winactor.com/questions/?q=XPath+表+行+列

複雑な階層構造のある統計表からの データ抽出のための記法の提案
https://www.jstage.jst.go.jp/article/jami/30/2/30_95/_pdf/-char/ja

  • なんかそれっぽい内容に見える
  • 半年くらいかけたら、わたしでも読み解けるのだろうか
  • 表3に纏まってるような気もする
  • 意訳してくれる神が颯爽と現れてくれたらカッコイイ
  • J-STAGEは国の機構で、科学技術の流通を担ってるらしい

 

みんな大好きOctoparse(使ったことないけど)

https://helpcenter.octoparse.jp/hc/ja/articles/360018740459-XPath応用編-2-テーブルデータを指定する

  • ひっじょーに近い
  • あくまでもVLOOKUP留まり

 

すべてを身につけたい

XPath チートシート
http://aoproj.web.fc2.com/xpath/XPath_cheatsheets_v2.pdf

  • 列見出しの列番号取得には関数が使えそうな予感

Position()
count(node-set)

  • HTMLの構造を踏まえると、各セルは行の子であって列の子ではない
  • 列見出しの列番号さえ特定できれば、VLOOKUP相当のXPathで何とかなるのかも
  • でも、tableから見れば行も列も子な訳で、うまいこと行と列の見出しを指定して値を取得できないものか

 

既製ライブラリの認識

  • 表の値取得
    行番号/列番号を指定して値を取得できる
  • テーブルスクレイピング
    テーブルをCSVに落とせる
  • テーブルスクレイピング(2次元配列出力)
    テーブルを配列にブチ込める
  • ブラウザ操作(指定した要素の属性の値を取得)
    text以外を取得できる

 

今回の目的でも、結果として配列を経由したほうがスマートなのかどうか。

配列操作(指定した条件の配列を抽出)

これで値を取得できる?

配列作成
抽出
行列入れ替え
抽出

なるべく1ライブラリ化したい。
配列なら複数ライブラリのタッグでも充分速いか。
サブルーチン化すれば良いだけかも。

 

preceding-siblingでXLOOKUP相当、following-siblingでVLOOKUP相当ができるというオフィシャルさんのコラム

https://winactor.com/questions/question/【wa0046】ブラウザ操作・xpathの作成_表データの操作/

この質問は解決済みのためクローズされています。
anothersolution ベストアンサーとして選択しました
回答とコメントは、会員登録(無料)で閲覧できるようになります。