Python 3 Urlopen vs Urlretreive - PullRequest
       15

Python 3 Urlopen vs Urlretreive

2 голосов
/ 19 октября 2010

Я работаю над сценарием для загрузки и обработки исторических цен акций. Когда я использовал urllib.request.urlopen, я получал странный префикс текста в каждом файле (b '\ xef \ xbb \ xbf), которого не было при использовании urllib.request.urlretrieve, и не присутствовал при вводе URL-адреса в браузер (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 Ответ

3 голосов
/ 05 марта 2011

0xEF, 0xBB, 0xBF - это спецификация для utf-8 .Это означает, что это строка в кодировке utf-8.Я предполагаю, что если вы используете wireshark, вы увидите, что он был там все время.Просто большинство программ игнорируют его.

Вместо str(page.read()) вам следует попробовать page.read().decode('utf-8-sig'), если вы хотите удалить спецификацию.Если вы хотите сохранить его, вы можете расшифровать его только с помощью 'utf-8'.

...