2013-05-12 176 views
0

我看過一些的例子在這裏,但我這樣一個新手,我不明白他們中的一些和其他人似乎不工作(可能是因爲我是個新手,但...字節到字符串或字符串到字節?

import urllib.request 
import re 
Symbols = ['aapl', 'spy' , 'goog' , 'nflx'] 
i = 0 
while i < len(Symbols): 
    Yahoo='http://finance.yahoo.com/q?s=' + Symbols[i] 
    htmlfile = urllib.request.urlopen(Yahoo) 
    htmltext = htmlfile.read() 
    string = Symbols[i] 
    symbol = string.encode('utf-8') 
    pattern= re.compile(b'<span id="yfs_l84_'+ symbol +'">(.+?)</span>') 
    price= re.findall(pattern, htmltext) 
    print('The price of' + str(Symbols[i]) + ' is ' + str(price)) 
    i+=1 

這不會因爲re.compile聲明我試圖來連接海峽和字節我需要將字符串轉換爲字節,這樣我以後可以遍歷符號列表和刮最新股價工作。

來自雅虎財經

我有一種感覺,我的語法出現了問題d例子和python文檔有一個'編碼'的參數,我認爲它是'utf-8'字符串,但我不知道。

有人可以幫助我嗎?

編輯:我在這裏使用字節,因爲這是它的唯一工作方式,如果我沒有(我正在使用3.3),我得到一個錯誤將其更改爲字節。

的錯誤是這樣的:

Traceback (most recent call last): 
    File "C:\Users\Deaven And Teigan\Documents\Python Projects\YahooFinance.py", line 14, in <module> 
    pattern= re.compile(b'<span id="yfs_l84_'+ symbol +'">(.+?)</span>') 
TypeError: can't concat bytes to str 
+0

你爲什麼要用字節串來創建正則表達式?另外,請發佈堆棧跟蹤和異常與您的問題。 – 2013-05-12 18:25:09

+0

@Lattyware,TypeError:不能在類似字節的對象上使用字符串模式 – 2013-05-12 18:33:23

回答

1

你應該用繩子工作權,直到您真正想要做的網絡請求,而不是混合字符串和字節代碼點。一般而言,字符串是字符的抽象表示,而字節是字符串中特定的編碼(例如Utf-8),可以通過網絡發送到字節序列中。

也許要使用一個原始字符串對於這一行:

pattern= re.compile(b'<span id="yfs_l84_'+ symbol +'">(.+?)</span>') 

而是使用

r'<span id="yfs_l84_' 
+0

這讓我通過了上述初始問題中提到的錯誤。但我得到一個新的錯誤。 price = re.findall(pattern,htmltext) 文件「C:\ Python33 \ lib \ re.py」,第201行,在findall中 return _compile(pattern,flags).findall(string) TypeError:can not use類似字節對象的字符串模式 – 2013-05-12 18:48:21

+0

我認爲當你從url請求中讀取數據到'htmltext'變量時,你會得到一個byes對象。您需要將響應數據正確解析爲更有意義的內容 - 例如你應該檢查http響應是如何編碼的,然後使用它解碼返回到字符串的字節。然後,您可以對結果字符串執行正則表達式。 – 2013-05-13 16:19:40

0

字符串=字節(符號[I], 'UTF-8')

+0

完成,謝謝大家 – 2013-05-12 19:00:55

0
import urllib.request 
import re 
Symbols = ['aapl', 'spy' , 'goog' , 'nflx'] 
i = 0 
while i < len(Symbols): 
Yahoo='http://finance.yahoo.com/q?s=' + Symbols[i] 
htmlfile = urllib.request.urlopen(Yahoo) 
htmltext = htmlfile.read() 
string = Symbols[i] 
symbol = string.encode('utf-8') 
pattern= re.compile(b'<span id="yfs_l84_'+ symbol +b'">(.+?)</span>') 
price= re.findall(pattern, htmltext) 
print('The price of' + str(Symbols[i]) + ' is ' + str(price)) 
i+=1 


Hai try this it works 
+0

不,它不會,主要是因爲你沒有正確縮進。 – 2014-07-23 16:52:42