2013-10-23 641 views
1

我正在從一個教程,從雅虎Fiances拉不同的股票價格。我有這個代碼,它的工作原理是打印出不同股票代碼的價格,然後是數組括號,但不是價格。所有幫助非常感謝。Python獲取股票價格

import urllib 
import re 

symbolslist = ["aapl", "spy", "goog", "nflx"] 

i = 0 
while i < len(symbolslist): 
    url = "http://finance.yahoo.com/q?s=" + symbolslist[i] + "&ql=1" 
    htmlfile = urllib.urlopen(url) 
    htmltext = htmlfile.read() 
    regex = '<span id="yfs_l84_' + symbolslist[i] + ' "> (.+?) </span>' 
    pattern = re.compile(regex) 
    price = re.findall(pattern, htmltext) 
    print "the price of ", symbolslist[i], " is ", price 
    i += 1 
+1

有可能雅虎在編寫代碼後更改了他們的HTML。您是否仔細檢查了它所尋找的跨度是否仍然存在? – redtuna

+2

爲什麼不使用for循環; symbolslist:'? –

+1

你的正則表達式有一個額外的空間e關閉'''在你的價格之前和之後 – cmd

回答

1

編輯:在第二個想法,你的正則表達式是不是在所有匹配的任何東西;請檢查正則表達式是否正確。

編輯2:好吧,看起來你把空白放在不需要的地方(而不是放在它應該在的地方)。在將代碼格式化時,請儘量保持整潔,以供自己使用,尤其是在向其他人展示時。正確的正則表達式是:

regex = '<span id="yfs_l84_' + symbolslist[i] + '">(.+?)</span>' 

除此之外...

最簡單的解決將是改變這一

price = re.findall(pattern, htmltext) 

price = re.findall(pattern, htmltext)[0] 

因爲re.findall返回列表,而不是單個項目,以及字符串表示法列表中的一個是[bla, bla, bla, ...]

Furhtermore,爲了遍歷一個序列的項目,不使用循環while用手動平衡和索引,這是不是彙編:

for symbol in symbols: 
    ... 
+0

謝謝Erik你是對的我的正則表達式寫錯了整個問題是我和'之間有一個空格。 – Codin

+0

@Codin:你真的需要寫東西在一般 - 只看你最後的評論:不是一個單一的即使你的評論由3個句子組成,也不是最後一個標點符號。 –

-2

也許'之間的「空間>正在導致問題

+1

嘗試和執行代碼並不難,所以你可以給出肯定的答案並且不要maybes。 –