0

Chromeで「値の取得」にかなりハマりました。
助けてください!のつもりが、質問を書き出す中でクリアできちゃいました。
答えは目の前にありました。
せっかくなので、気づきを含めてお裾分けです。
★が答えです。

 

状況

  • 同じ位置に、どちらかのパターンのtdが表示される

<td><span id="a">あ<span></td>

<td id="b"><span>い</span></td>

  • 以前の状況

<td id="c">う</td>

 

やりたいこと

  • 「あ」か「い」を取得したい

 

ハードル

  • いくつかリファレンスを当たってみたものの、「or」の利用例は同じ階層の要素ばかり、、

XPathとは?基本概念や書き方をわかりやすく解説! | Octoparse
https://www.octoparse.jp/blog/xpath-introduction/#h_d669da4f-ecd1-4e53-8045-b33301d785c8

III. XPathによく使う関数

3. and/not/or:複数の条件が含まれている要素を指定する

  • 仕様書も覗いてはみたものの、、

 

妥協案

  • それぞれ取得できるので、こうするつもりだった

例外処理
 正常系
  値の取得://td[@id="a"]、取得値
 異常系
  値の取得://span[@id="b"]、取得値

  • XPathの1表現が最速と思い込んでいるため、少し心残り

https://winactor.com/questions/question/サイト内の文字列4種いずれかの有無チェック(4ラ/

  • 実際は僅かな差かもしれないものの、美しくないと感じてしまう
  • どちらのパターンでも、XPathでガバっとひと掴みにしたい

 

採用したXPath

//*[@id="a" or @id="b"]

 

クリア後の所感

  • Chromeでid要素起点のXPathが取得されるときのアスタリスクで氷解
  • 曖昧さを排除したくて、原則的にタグに書き換えて使ってきた
  • 今回はこの方針が目隠しとなって、目の前にあるアスタリスクが見えていなかった
  • 灯台下暗し
  • ハードルにぶち当たったときこそ、キホンに立ち返る大切さ
  • 書き出してみる効果
  • 少し遠回りして時間を無駄にしたけど、良い教訓になった

 

  • ※ タグは後続処理でまるっと削除しているので、「値の取得」で一緒に取得されること自体は何ら問題ない

 

HTMLタグの削除に使っている正規表現

<(".*?"|'.*?'|[^'"])*?>

環境
WinActor630

anothersolution 質問の投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。