Вопрос

Я работаю над сценарием для скачивания и обработки исторических цен на акции. Когда я использовал Urllib.request.urlopen, у меня есть странный префикс текста в каждом файле (b ' xef xbb xbf), который не был присутствующим, когда я использовал Urllib.request.urleretRieve, ни присутствующим, когда я набрал URL в браузер (Firefox). Поэтому у меня есть ответ, но я не знаю, почему это вызвало проблему в первую очередь. Я подозреваю, что это может быть, потому что я заставил это быть строкой, но я не знаю, почему то есть или как я бы работал вокруг этого (кроме того, чтобы использовать urlretrive вместо). Код ниже. Соответствующая линия - это линия 11. Прокомментированный код после того, как я использовал Orelopen.

    #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()
Это было полезно?

Решение

0xef, 0xbb, 0xbf - это BOM для UTF-8. Отказ Это означает, что это кодированная строка UTF-8. Я предполагаю, что если вы используете Wireshark, вы увидите, что это было там все вместе. Это просто, что большинство программ игнорируют это.

Вместо str(page.read()) Ты должен попытаться page.read().decode('utf-8-sig') Если вы хотите удалить изг. Если вы хотите сохранить его, вы можете декодировать только с «UTF-8».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top