2

我正在编写一个脚本来下载和处理历史股票价格。当我使用 urllib.request.urlopen 时,我在每个文件 (b'\xef\xbb\xbf) 中都有一个奇怪的文本前缀,当我使用 urllib.request.urlretrieve 时不存在,当我将 url 键入时也不存在浏览器(火狐)。所以我有一个答案,但我不知道为什么它首先会导致问题。我怀疑这可能是因为我强迫它成为一个字符串,但我不知道为什么会这样或者我将如何解决这个问题(除了使用 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()
4

1 回答 1

3

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

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

于 2011-03-04T23:17:39.237 回答