1
NYSEのウェブサイトから株価を削っています。例えば、page for IBMには、に対応するフィールドを削り取りたいと思います。の中からデータグリッドの中から最後の価格を削りました。私はこのグリッドがreact.jsを使って生成されると信じています。私のブラウザで開発者向けのツールで、私は必要なデータを見つけることができます。 React.jsデータグリッドからデータをスクラップできません
<span class="rtq-d big" domid="LastPrice">148.95</span>
だからとページが完全に
domid="LastPrice"
とのスパンを検索することが可能なはずであるロード。しかし、私は計画的にグリッドを読み込むことはできません。この作業で素朴なスクレイパーが失敗するのは特に驚くべきことではありませんが、PhantomJSとFirefoxの両方をセレンを使って使用することにも問題がありました。たとえば、以下のコードでは、グリッド外のDOM要素を見つけることができますが、
<span>
内にはのグリッドが見つかりません。奇妙なのは、実際にfirefoxウィンドウ(セレンで開く)に読み込まれたグリッドを見ることができるということですが、読み込んだ後でもプログラム的に到達可能ではないようです。
In [1]: from selenium import webdriver
In [2]: driver = webdriver.Firefox()
In [3]: driver.get('http://www.nyse.com/quote/XNYS:IBM')
In [4]: driver.find_element_by_xpath('//div[@id="content-1500013182"]') # outside grid
Out[4]: <selenium.webdriver.remote.webelement.WebElement (session="a67fa410-8033-472a-8932-ccc40ef026a3", element="{61a9aded-1b9d-4995-9a74-031c3cff5e55}")>
In [5]: driver.find_element_by_xpath('//span[@domid="LastPrice"]') # inside grid
Out[5]: NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"//span[@domid=\"LastPrice\"]"}
セレンドライバをページに実際にロードされているものと同期させる何らかの呪文がありませんか?または、おそらく、そのページが適切に読み込まれていることを確認するために、ドライバからjavascriptを実行する必要がありますか?
広告のとおりに動作します。ありがとうリーバイス! – user41140