Python 3 Urlopen против URLretreive
-
09-10-2019 - |
Вопрос
Я работаю над сценарием для скачивания и обработки исторических цен на акции. Когда я использовал 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».