web-dev-qa-db-ja.com

Fidelity WebサイトからGICSコードを抽出する

これはウェブサイトです:

https://eresearch.fidelity.com/eresearch/goto/evaluate/snapshot.jhtml?symbols=aapl&type=o-NavBar

次の2つのデータをGoogleスプレッドシートに引き出そうとしています。

  • セクター(GICS®)
  • 産業(GICS®)

つまり、上記について次の2つを表示する必要があります。

  • 情報技術
  • テクノロジーハードウェア、ストレージ、周辺機器

私は以下を含む通常のテクニックを試しました:

  • importData
  • importHTML
  • importXML(これによりエラーが発生しました)。

GoogleのInspect Elementツールを介して導出したXPathは次のとおりです。

  • //*[@id="companyProfile"]/div[8]/span/a
  • //*[@id="companyProfile"]/div[13]/span/a

これまでのところ何も機能していません。このデータをGoogleスプレッドシートに抽出するにはどうすればよいですか?

2

コマンドIMPORTXMLは、テキストコンテンツのないノードを無視します。たとえば、本文が構成されているドキュメントから//div[3]を取得します

<div>First</div> <div>Second</div> <div></div> <div>Fourth</div>

「4番目」になります。したがって、<div>要素を数えるときは、テキストがない要素をスキップします。探している要素が返されます

=IMPORTXML( url , "//div[@id='companyProfile']/div[4]/span")

そして

=IMPORTXML( url , "//div[@id='companyProfile']/div[5]/span")

より堅牢なソリューションのために、要素の番号付けにまったく依存しないことをお勧めします。次のコマンドは、1つの呼び出しで必要な両方の値を1つ下に返します。

=IMPORTXML( url , "//div[@id='companyProfile']/div[@class='sub-heading']/span")

必要に応じて、TRANSPOSEを結果に適用して並べることができます。または、カスタムポジショニングが必要な場合は、一度に1つずつ取得します

=IMPORTXML( url , "//div[@id='companyProfile']/div[@class='sub-heading'][1]/span")

そして

=IMPORTXML( url , "//div[@id='companyProfile']/div[@class='sub-heading'][2]/span")

XPathコマンドでは、二重引用符で囲まれた文字列であるため、単一引用符を使用する必要があります。


Inspect Elementツールを使用することは本質的に悪い考えではありません(ドキュメントの素敵なツリービューを表示します)が、重要な注意事項があります:このツールはドキュメントを表示しますafterJavaScriptはページ上で実行されますが、IMPORTXMLはソースをそのまま取得しますbeforeJavaScript処理。これは、スクリプトによっていくつかの要素が追加されるときに問題になります(私の答え here の例)。 IMPORTXMLがどのように機能するかを正確に確認するには、Chromeで右クリック-> [ページのソースを表示]を使用するか、他のブラウザーで同等のものを使用します。

2
user79865