2016-05-21 74 views
0

我一直在試圖移植一個腳本,它將從雅虎財經網站請求基本數據,但我想尋找特定的項目而不是整個報告,如價格書籍比例。所以,我已經按照Sentdex的教程介紹瞭如何做到這一點。問題是這個示例代碼是爲Python 2.7編寫的,我正在努力爲Python 3做這個工作,當然還要增加更多的功能來擴展它。使用Python 3從雅虎財經網站檢索股票信息

下面是它是迄今爲止在尋找:

import time 
import urllib 
import urllib.request 


sp500short = ['a', 'aa', 'aapl', 'abbv', 'abc', 'abt', 'ace', 'aci', 'acn', 'act', 'adbe', 'adi', 'adm', 'adp'] 


def yahooKeyStats(stock): 

    try: 
     sourceCode = urllib.request.urlopen('http://finance.yahoo.com/q/ks?s='+stock).read() 
     pbr = sourceCode.split('Price/Book (mrq):</td><td class="yfnc_tabledata1">')[1].split('</td>')[0]  
     print ('price to book ratio:'),stock,pbr 

    except Exception as e: 
     print ('failed in the main loop'),str(e) 


for eachStock in sp500short: 
    yahooKeyStats(eachStock) 
    time.sleep(1) 

我幾乎可以肯定的問題是對PBR變量定義,在它的分裂的一部分。的:

Price/Book (mrq):</td><td class="yfnc_tabledata1"> 

而且...:

</td> 

...只是某種分隔符正如我正在尋找,實際值,在上面列出的兩個項目之間。但是,到目前爲止,它只是在執行時給我例外消息。

任何幫助將不勝感激。 乾杯,

+0

使用HTML解析器,如BeautifulSoup。 –

+1

有很多方法可以在不刮取網頁的情況下做你想做的事情...相關:http://stackoverflow.com/questions/12433076/download-history-stock-prices-automatically-from-yahoo-finance-in-python –

回答

1

它看起來像urllib.request.urlopen.read()正在返回類型爲bytes的數據。

從python文檔:

注意的urlopen返回bytes對象。這是因爲urlopen無法自動確定從http服務器收到的字節流的編碼。通常,一旦程序確定或猜測到合適的編碼,程序就會將返回的字節對象解碼爲字符串。

split方法在這裏失敗。嘗試在.read()之後附加.decode()。問題在於你試圖用字符串拆分bytes類型的sourceCode變量。解碼sourceCode會將其從字節轉換爲字符串。或者,你可以使用.encode()這兩個分隔符。

bytes.decode

+0

好點!我做到了,看起來問題代碼塊現在正在處理中,但仍然部分地是因爲我正在從腳本接收「價格與書本的比率」,而不是價值本身:sourceCode = urllib.request.urlopen('http ://finance.yahoo.com/q/ks?s ='+ stock).read().decode() – dude

+0

打印一個字符串的語法似乎在這裏的例子中。應該是:'print('price to book ratio:',stock,pbr)' –

+0

Thanks buddy !!那樣做了! :D – dude

相關問題