2010-10-19 7 views
2

Je travaille sur un script pour télécharger et traiter les cours historiques. Quand j'ai utilisé urllib.request.urlopen, j'ai reçu un étrange préfixe de texte dans chaque fichier (b '\ xef \ xbb \ xbf) qui n'était pas présent quand j'ai utilisé urllib.request.urlretrieve, ni présent lorsque j'ai tapé l'url dans un navigateur (Firefox). J'ai donc une réponse, mais je ne sais pas pourquoi cela causait un problème en premier lieu. Je suppose que c'est peut-être parce que je l'ai forcé à être une chaîne, mais je ne sais pas pourquoi c'est ou comment je travaillerais autour de cela (autre que d'utiliser urlretrieve à la place). Le code est ci-dessous. La ligne pertinente est la ligne 11. Le code commenté après est quand j'utilisais orlopen.Python 3 Urlopen vs Urlretreive

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

Répondre

3

0xEF, 0xBB, 0xBF est le BOM for utf-8. Cela signifie qu'il s'agit d'une chaîne encodée en utf-8. Je suppose que si vous utilisez wireshark, vous verrez qu'il était là tout le temps. C'est juste que la plupart des programmes l'ignorent. Au lieu de str(page.read()), vous devriez essayer page.read().decode('utf-8-sig') si vous souhaitez supprimer la nomenclature. Si vous voulez le garder, vous pouvez le décoder avec 'utf-8'.