字符串到字符串或字符串到字节?

时间:2013-05-12 18:21:21

标签: python string encoding byte screen-scraping

我已经阅读了这里的一些例子,但我是一个新手,我不理解其中的一些,而其他人似乎没有工作(可能是因为我是一个新手但是......

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。

我需要将字符串转换为字节,以便稍后我可以遍历符号列表并从雅虎财务中获取最新股票价格。

我觉得我的语法有问题,而且示例和python文档都有'encoding'的参数,我认为是'utf-8'字符串,但我真的不知道。

有人可以帮我这个吗?

编辑:我在这里使用Bytes,因为这是它工作的唯一方式,如果我没有(我使用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

3 个答案:

答案 0 :(得分:1)

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

也许你想在这一行使用原始字符串:

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

改为使用

r'<span id="yfs_l84_'

答案 1 :(得分:0)

string = bytes(符号[i],'Utf-8')

答案 2 :(得分: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