2014-10-09 131 views
0

我想要獲得一些使用html爬行的經驗,所以我想看看我是否可以獲取以下網站的一些值:http://www.iex.nl/Aandeel-Koers/11890/Royal-Imtech/koers.aspx如何讓python request.get等幾秒鐘?

此網站顯示imtech股票的價格。 如果你看看這個網站,你會發現有一個數字以粗體顯示,這是股票的價格。

正如你可能看到的那樣,這個價格變化了,沒關係。在這個時候,我只想在我運行腳本的時候獲得價值。

,但如果你重新加載頁面,你會發現它是如何首先顯示「laatste koers」和1秒的延遲後顯示「實時」

正如你可能現在已經想通了,我對「實時」價值感興趣。

這是我的問題,我如何得到這個值,我試過time.sleep(2)在不同的地方。我已經嘗試了請求超時。兩者都不起作用。

我該如何解決這個問題?

from lxml import html 
import requests 

pagina = 'http://www.iex.nl/Aandeel-Koers/11890/Royal-Imtech/koers.aspx' 

page = requests.get(pagina) 
tree = html.fromstring(page.text) 

koers = tree.xpath('//span[@class="RealtimeLabel"]/text()') 

prices = tree.xpath('//span[@id="ctl00_ctl00_Content_LeftContent_PriceDetails_lblLastPrice"]/text()') 
print koers[0], pagina.split("/")[5], prices[0] 

我得到的輸出喜歡這個

Laatste koers Royal-Imtech 0,093 

雖然我想這樣

Realtime Royal-Imtech 0,093 
+0

我懷疑「Laatste koers」被更改爲「實時」的頁面上的一些JavaScript,在這種情況下我們看到的網頁是什麼樣子的腳本執行後,沒有簡單的方法。我不認爲'request'完全執行用戶端腳本。 – Kevin 2014-10-09 14:00:57

+0

它通過javascript更改是的,但「Laatste koers」也通過javascript插入 – zazga 2014-10-09 14:04:45

+2

@zazga:'request'和'lxml'永遠不會執行頁面中的JS;你必須對這種行爲進行逆向工程並自己動手,*或者*使用像Selenium這樣的東西來驅動一個實際執行JavaScript的瀏覽器。 – 2014-10-09 14:12:49

回答

1

輸出我建議使用等到元素的變化。

查找下面的代碼段可以幫助您。

def wait_while(condition, timeout, delta=1): 
    """ 
    @condition: lambda function which checks if the text contains "REALTIME" 
    @timeout: Max waiting time 
    @delta: time after which another check has to be made 
    """ 
    max_time = time.time() + timeout 
    while max_time > time.time(): 
     if condition(): 
      return True 
     time.sleep(delta) 
    return False 
+0

您需要接受答案或請自己解決方案 – Abhinav 2014-10-17 15:23:46

+0

這對你有幫助嗎? – Abhinav 2015-12-09 19:45:33