Pregunta

Estoy trabajando en un script para descargar y procesar los precios de valores históricos. Cuando solía urllib.request.urlopen Tengo una extraña prefijo del texto en cada archivo (b '\ XEF \ xbb \ XBF) que no estaba presente cuando utilicé urllib.request.urlretrieve, ni presente cuando escribió la dirección URL en una navegador (Firefox). Así que tengo una respuesta, pero no sé por qué estaba causando un problema en el primer lugar. Sospecho que puede ser debido a que la obligaron a ser una cadena, pero no sé qué es o cómo iba a evitar que (aparte de utilizar urlretrieve en su lugar). El código está por debajo. La línea de referencia es la línea 11. El código comentado después es cuando yo estaba usando 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()
¿Fue útil?

Solución

0xEF, 0xBB, 0xBF es la lista de materiales para UTF-8 . Significa que esto es una cadena codificada en UTF-8. Supongo que si utiliza Wireshark verá que era allí todo el tiempo. Es sólo que la mayoría de los programas ignoran.

En lugar de str(page.read()) usted debe tratar page.read().decode('utf-8-sig') si desea eliminar la lista de materiales. Si desea mantenerlo puede decodificar simplemente con 'UTF-8'.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top