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语句中我试图连接 str 和 bytes。

我需要将字符串转换为字节,以便以后可以遍历符号列表并从 yahoo Finance 获取最新的股票价格。

我感觉那里的语法有问题,示例和 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
4

3 回答 3

1

您应该一直使用字符串,直到您真正想要发出网络请求,而不是在代码中混合字符串和字节。一般来说,字符串是字符的抽象表示,而字节是字符串的特定编码(例如 Utf-8),可以通过网络发送到字节序列中。

也许您想为此行使用原始字符串:

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

而是使用

r'<span id="yfs_l84_'
于 2013-05-12T18:39:02.963 回答
0

字符串 = 字节(符号 [i],'Utf-8')

于 2013-05-12T19:00:18.640 回答
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  
于 2014-07-23T16:34:33.643 回答