2013-05-12 136 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