2010-10-19 37 views
2

我正在研究脚本以下载和处理历史股票价格。 当我使用urllib.request.urlopen时,我在每个文件(b'\ xef \ xbb \ xbf)中都有一个奇怪的前缀,当我使用urllib.request.urlretrieve时不存在,当我输入url时不存在一个浏览器(Firefox)。 所以我有一个答案,但我不知道为什么它首先导致问题。我怀疑这可能是因为我强制它是一个字符串,但我不知道为什么这是或我将如何解决该问题(而不是使用urlretrieve)。 代码如下。相关行是第11行。之后的注释代码是当我使用orlopen时。Python 3 Urlopen vs Urlretreive

#download a bunch of historical stock quotes from google finance 

import urllib.request 
symbolarray = [] 
symbolfile = open("symbols.txt") 
for line in symbolfile: 
    symbolarray.append(line.strip()) 
symbolfile.close() 

for symbol in symbolarray: 
    page = urllib.request.urlretrieve("http://www.google.com/finance/historical?q=NYSE:"+symbol+"&output=csv",symbol+".csv") 
    #datafile = open(symbol+".csv","w") 
    #datafile.write(str(page.read())) 
    #datafile.close() 

回答

3

0xEF,0xBB,0xBF是BOM for utf-8。它表示这是一个utf-8编码的字符串。我猜如果你使用wireshark,你会发现它一直存在。只是大多数程序忽略了它。

而不是str(page.read())如果要删除BOM,您应该尝试page.read().decode('utf-8-sig')。如果你想保留它,你可以用'utf-8'解码。