2016-05-12 5 views
1

Ich versuche, einen Aktienkurs von der NYSE-Website zu kratzen. Zum Beispiel auf der page for IBM Ich möchte das Feld entsprechend Letzter Preis aus dem Zitat Datenraster kratzen. Ich glaube, dass dieses Gitter mit react.js erzeugt wird. Mit Entwickler-Tools in meinem Browser kann ich die gewünschten Daten finden:Es ist nicht möglich, Daten aus einem React.js-Datenraster zu scratzen

<span class="rtq-d big" domid="LastPrice">148.95</span> 

So mit dem Laden der Seite vollständig sollte es möglich sein, für einen Zeitraum zu suchen, mit domid="LastPrice". Aber ich kann das Raster nicht programmatisch laden. Es ist nicht besonders überraschend, dass naive Scraper bei dieser Aufgabe versagen, aber ich hatte auch Probleme mit PhantomJS und Firefox durch Selen. Zum Beispiel schlägt der folgende Code vor, dass, während es möglich ist, DOM-Elemente außerhalb des Gitters zu finden, das gewünschte <span>innerhalb das Gitter nicht gefunden werden kann. Was merkwürdig ist, ist, dass ich das Grid tatsächlich im Firefox-Fenster (geöffnet von Selen) sehen kann, aber auch nach dem Laden scheint es nicht programmatisch erreichbar zu sein.

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\"]"} 

Bin ich eine Art von Beschwörung fehlt, der die Selen-Treiber mit synchronisiert, was auf der Seite tatsächlich geladen wird? Oder muss ich vielleicht etwas Javascript vom Treiber ausführen, um sicherzustellen, dass diese Seite korrekt geladen ist?

Antwort

2

Das gewünschte Span-Element befindet sich in einem iframe, was bedeutet, dass das span-Element nicht direkt gefunden werden kann. Um darauf zugreifen zu können, müssen Sie zuerst das webdriver-Objekt anweisen, auf den iFrame zu wechseln:

+0

Funktioniert wie angegeben. Danke Levi! – user41140

Verwandte Themen