Python 3 Urlopen vs Urlretreive

时间:2010-10-19 01:25:25

标签: python-3.x urllib stockquotes

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

    #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()

1 个答案:

答案 0 :(得分:3)

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

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

相关问题