行と列の見出し指定でテーブルからクロス抽出したい
ブラウザを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://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の作成_表データの操作/