xPathの質問です。googlespreadsheetでImportXMLでこちらのサイト

http://jp.investing.com/currencies/nzd-jpy
から 前日比を取得したいのですが
どのように記述すればよろしいでしょうか?
=ImportXML("http://jp.investing.com/currencies/nzd-jpy","//*[@class='arial_20 greenFont pid-58-pc']")
と記述しても取得できません

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2015/07/22 15:22:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4967ベストアンサー獲得回数2151

ポイント300pt

以下の式で取得できました。

=ImportXML("http://jp.investing.com/currencies/nzd-jpy","//span[@id='last_last']/../span[2]")

他2件のコメントを見る
id:a-kuma3

今回のやつは、こんな感じで調べました。
質問の XPath を見ると greenFont って入ってるので、「また、日によって変わる属性か」と予断。
実際のページを見ると文字は緑だし、ブラウザのインスペクタで class 属性を見ると、指定は合ってそう。
Google spreadsheet に貼り付けて、データが取れないのを確認。
ブラウザの「ソースを表示する」で class 属性を確認。
すると、以下のように空白が三つ入っているところがあるのを確認。

<span class="arial_20 redFont   pid-58-pc" dir="ltr">-0.15</span>
                             ↑ここ

空白の数も合わせた class 属性の指定をしても、データが取れないのを確認。
  ここでちょっと詰まります。

以前の質問のように、そもそも ImportXML 関数で取得できない可能性を疑う。
近くにある id="last_last" を指定した ImportXML を描いてみて、データが取れることを確認。
上の階層をたどって行って、適当な id 属性が振られているものがなかったので、id="last_last" からの相対パスで書いてみる。
データが取れることを確認したので、回答へ。


ぼくはプログラムを書く人なので、XML は知ってますし、XPath もある程度知ってます。
XML に見た目をつけたりするのに使う XSL というのがあるんですけれど、これが XPath をバリバリ使います。
それでも、使う機会は限られているので、すべて頭の中に入ってるわけではなく、こういうのを使ってます。
http://aoproj.web.fc2.com/xpath/XPath_cheatsheets_v2.pdf

でも、以下の六つがあれば、大抵のことはできます。

  • タグの指定
  • 属性の指定
  • ひとつずつたどる /
  • 下の階層全てを指す //
  • 上の階層を指す ..
  • 何番目を指定する [n]

この質問で回答する前だったら、.. は入れてないかも。


後、一連の質問で Google spreadsheet の ImportXML 関数を使ってみて、以下のような経験がありました。

  • そもそも、データを取得できないページがある(これは、HTML ≠ XML なので分かりやすい)
  • XML の構造は HTML DOM ではなく、ソースの文字列を XML として解析しているだけ(table の tbody を書いちゃいけないとか)
  • XPath の構文全てが使えるわけではないっぽい



こんなんで、コメントへの回答になってますかね?

2015/07/22 16:18:06
id:Izkgkf0CPUsl85gi0dBq

はい!勉強になりました!ありがとうございました

2015/07/22 23:17:51

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません