Foros del Web » Programando para Internet » Python »

Extraer informacion de internet

Estas en el tema de Extraer informacion de internet en el foro de Python en Foros del Web. Hola, necesito una colaboracion. Necesito extraer informacion sobre los valores historicos de las acciones de la pagina yahoo finanzas, pero no puedo acceder al resultado ...
  #1 (permalink)  
Antiguo 09/10/2010, 16:22
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Extraer informacion de internet

Hola, necesito una colaboracion. Necesito extraer informacion sobre los valores historicos de las acciones de la pagina yahoo finanzas, pero no puedo acceder al resultado que obtengo despues de lo siguiente:

>>> import urllib.request
>>> request = urllib.request
>>> url = 'http://ichart.finance.yahoo.com/table.csv?s=AAPL&g=d&a=8&b=20&c=2010&d=8%e=29&f=20 10'
>>> fichier
<http.client.HTTPResponse object at 0x0185D750>
Si alguien me puede colaborar le agradeceria demasiado.
  #2 (permalink)  
Antiguo 09/10/2010, 16:28
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Extraer informacion de internet

Checa las FAQ's
  #3 (permalink)  
Antiguo 09/10/2010, 16:31
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Extraer informacion de internet

Que son las FAQ's

Por lo que se la respuesta que tengo es como una tabla pero no puedo acceder a ella
  #4 (permalink)  
Antiguo 09/10/2010, 16:34
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Extraer informacion de internet

FAQ's (Frequently asked questions)

Probablemente necesites obtener el código html y parsear el código para obtener los datos que a ti te interesan.

Código Python:
Ver original
  1. import urllib2
  2. try:
  3.     f = urllib2.urlopen("http://www.google.com/")
  4.     data = f.read()
  5.     f.close()
  6.     print data
  7. except HTTPError, e:
  8.     print "Error:"
  9.     print e.code
  10. except URLError, e:
  11.     print "Error:"
  12.     print e.reason
  #5 (permalink)  
Antiguo 09/10/2010, 16:49
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Extraer informacion de internet

Hasta donde tengo entendido el mensaje que me sale
<http.client.HTTPResponse object at 0x0185D750>
no es un error, el objeto esta creado pero no lo purdo visulizar, que tengo que hacer para verlo.

porque tengo un ejemplo que me dio mi profesor y a el le resulta lo siguiente

Par exemple, la requête suivante:

http://ichart.finance.yahoo.com/table.csv?s=GOOG&g=d&a=8&b=20&c=2010&d=8&e=29&f=20 10
produira le résultat suivant:

Date,Open,High,Low,Close,Volume,Adj Close
2010-09-29,527.85,532.94,524.71,527.69,2172200,527.69
2010-09-28,533.48,533.59,518.45,527.17,3654700,527.17
2010-09-27,528.85,536.85,528.85,530.41,3107400,530.41
2010-09-24,521.74,527.83,518.26,527.29,3356900,527.29
2010-09-23,514.61,519.69,511.30,513.48,2317400,513.48
2010-09-22,512.86,517.78,511.68,516.00,2537100,516.00
2010-09-21,509.68,519.98,508.91,513.46,4466300,513.46
2010-09-20,492.50,510.41,492.06,508.28,4403500,508.28

a mi no me muestra los datos.

Gracias
  #6 (permalink)  
Antiguo 09/10/2010, 16:56
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Extraer informacion de internet

oye, no mira hice lo siguiente:

>>> import urllib.request
>>> request = urllib.request
>>> url = 'http://ichart.finance.yahoo.com/table.csv?s=AAPL&g=d&a=8&b=20&c=2010&d=8%e=29&f=20 10'
>>> fichier = request.urlopen(url)
>>> for ligne in fichier:
print(ligne.decode())


Date,Open,High,Low,Close,Volume,Adj Close
2010-10-08,291.71,294.50,290.00,294.07,23478500,294.07
2010-10-07,290.34,290.48,286.91,289.22,14556200,289.22
2010-10-06,289.59,291.99,285.26,289.19,23911000,289.19
2010-10-05,282.00,289.45,281.82,288.94,17874300,288.94
2010-10-04,281.60,282.90,277.77,278.64,15525600,278.64
2010-10-01,286.15,286.58,281.35,282.52,16005100,282.52
2010-09-30,289.00,290.00,281.25,283.75,24034900,283.75
2010-09-29,287.23,289.81,286.00,287.37,16757000,287.37
2010-09-28,291.77,291.77,275.00,286.86,36937700,286.86
2010-09-27,293.98,294.73,291.01,291.16,17244100,291.16
2010-09-24,292.10,293.53,290.55,292.32,23196000,292.32
2010-09-23,286.33,292.76,286.00,288.92,28075600,288.92
2010-09-22,282.71,287.98,282.41,287.75,20903200,287.75
2010-09-21,283.86,287.35,282.79,283.77,23859800,283.77
2010-09-20,276.08,283.78,275.85,283.23,23524200,283.23


Me faltaba decodificarlo, pero como accedo a cada uno de los datos?

Gracias
  #7 (permalink)  
Antiguo 09/10/2010, 16:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Extraer informacion de internet

Código Python:
Ver original
  1. import urllib
  2. url = 'http://ichart.finance.yahoo.com/table.csv?s=AAPL&g=d&a=8&b=20&c=2010&d=8%e=29&f=20 10'
  3. try:
  4.     print urllib.urlopen(url).read()
  5. except HTTPError, e:
  6.     print "Error:", e
  #8 (permalink)  
Antiguo 09/10/2010, 17:10
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Extraer informacion de internet

no mira ya logre visulizar los datos, pero como puedo tomar cada uno de los datos para manipularlos

hice lo siguiente:

>>> import urllib.request
>>> request = urllib.request
>>> url = 'http://ichart.finance.yahoo.com/table.csv?s=AAPL&g=d&a=8&b=20&c=2010&d=8%e=29&f=20 10'
>>> fichier = request.urlopen(url)
>>> for ligne in fichier:
print(ligne.decode())

Date,Open,High,Low,Close,Volume,Adj Close
2010-10-08,291.71,294.50,290.00,294.07,23478500,294.07
2010-10-07,290.34,290.48,286.91,289.22,14556200,289.22
2010-10-06,289.59,291.99,285.26,289.19,23911000,289.19
2010-10-05,282.00,289.45,281.82,288.94,17874300,288.94
2010-10-04,281.60,282.90,277.77,278.64,15525600,278.64
2010-10-01,286.15,286.58,281.35,282.52,16005100,282.52
2010-09-30,289.00,290.00,281.25,283.75,24034900,283.75
2010-09-29,287.23,289.81,286.00,287.37,16757000,287.37
2010-09-28,291.77,291.77,275.00,286.86,36937700,286.86
2010-09-27,293.98,294.73,291.01,291.16,17244100,291.16
2010-09-24,292.10,293.53,290.55,292.32,23196000,292.32
2010-09-23,286.33,292.76,286.00,288.92,28075600,288.92
2010-09-22,282.71,287.98,282.41,287.75,20903200,287.75
2010-09-21,283.86,287.35,282.79,283.77,23859800,283.77
2010-09-20,276.08,283.78,275.85,283.23,23524200,283.23

El resultado es una tabla o es una lista? no entiendo que obtuve.
  #9 (permalink)  
Antiguo 09/10/2010, 17:12
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Extraer informacion de internet

Puedes usar el modulo csv o puedes hacer un simple split

Código Python:
Ver original
  1. import urllib
  2.  
  3. url = 'http://ichart.finance.yahoo.com/table.csv?s=AAPL&g=d&a=8&b=20&c=2010&d=8%e=29&f=20 10'
  4.  
  5. f = urllib.urlopen(url)
  6. data = f.read()
  7. lines = data.split()
  8. for line in lines:
  9.     print line.split(",")
  #10 (permalink)  
Antiguo 09/10/2010, 17:28
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Extraer informacion de internet

Usando el modulo csv lo puedes hacer de la manera correcta:
Código Python:
Ver original
  1. import urllib
  2. import csv
  3. import cStringIO
  4.  
  5. #Esto es la url
  6. url = 'http://ichart.finance.yahoo.com/table.csv?s=AAPL&g=d&a=8&b=20&c=2010&d=8%e=29&f=20 10'
  7.  
  8. #Obtenemos datos
  9. f = urllib.urlopen(url)
  10. data = f.read()
  11. f.close()
  12.  
  13. #Necesitamos un de estos para no usar archivos
  14. stream = cStringIO.StringIO(data)
  15.  
  16. #generamos un lector
  17. reader = csv.reader(stream, delimiter=",")
  18.  
  19.  
  20. flag = False #flag para las cabeceras
  21. for row in reader:
  22.     if flag:
  23.         pass #Hacer algo con row
  24.     else:
  25.         flag = True #Flag para la primera linea, que es la cabecera
  26.        
  27.     print ', '.join(row)
  #11 (permalink)  
Antiguo 09/10/2010, 17:31
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Extraer informacion de internet

bueno esta perfecto, ahora obtuve lo siguiente:

['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj']
['Close']
['2010-10-08', '291.71', '294.50', '290.00', '294.07', '23478500', '294.07']
['2010-10-07', '290.34', '290.48', '286.91', '289.22', '14556200', '289.22']
['2010-10-06', '289.59', '291.99', '285.26', '289.19', '23911000', '289.19']
['2010-10-05', '282.00', '289.45', '281.82', '288.94', '17874300', '288.94']
['2010-10-04', '281.60', '282.90', '277.77', '278.64', '15525600', '278.64']
['2010-10-01', '286.15', '286.58', '281.35', '282.52', '16005100', '282.52']
['2010-09-30', '289.00', '290.00', '281.25', '283.75', '24034900', '283.75']
['2010-09-29', '287.23', '289.81', '286.00', '287.37', '16757000', '287.37']
['2010-09-28', '291.77', '291.77', '275.00', '286.86', '36937700', '286.86']
['2010-09-27', '293.98', '294.73', '291.01', '291.16', '17244100', '291.16']
['2010-09-24', '292.10', '293.53', '290.55', '292.32', '23196000', '292.32']
['2010-09-23', '286.33', '292.76', '286.00', '288.92', '28075600', '288.92']
['2010-09-22', '282.71', '287.98', '282.41', '287.75', '20903200', '287.75']
['2010-09-21', '283.86', '287.35', '282.79', '283.77', '23859800', '283.77']
['2010-09-20', '276.08', '283.78', '275.85', '283.23', '23524200', '283.23']

pero si trato de acceder por ejemplo al nombre 'date' se supone que son listas
pero no logro acceder al primer elemento si le doy por ejemplo line[0]
me da
50

no entiendo
  #12 (permalink)  
Antiguo 09/10/2010, 17:41
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Extraer informacion de internet

Código Python:
Ver original
  1. import urllib
  2.  
  3. url = 'http://ichart.finance.yahoo.com/table.csv?s=AAPL&g=d&a=8&b=20&c=2010&d=8%e=29&f=20 10'
  4.  
  5. f = urllib.urlopen(url)
  6. data = f.read()
  7. lines = data.split("\n")
  8. for line in lines:
  9.     datos = line.split(",")
  10.     print datos[0]

Mejor usa la forma correcta:
Código Python:
Ver original
  1. import urllib
  2. import csv
  3. import cStringIO
  4.  
  5. #Esto es la url
  6. url = 'http://ichart.finance.yahoo.com/table.csv?s=AAPL&g=d&a=8&b=20&c=2010&d=8%e=29&f=20 10'
  7.  
  8. #Obtenemos datos
  9. f = urllib.urlopen(url)
  10. data = f.read()
  11. f.close()
  12.  
  13. #Necesitamos un de estos para no usar archivos
  14. stream = cStringIO.StringIO(data)
  15.  
  16. #generamos un lector
  17. reader = csv.reader(stream, delimiter=",")
  18.  
  19.  
  20. flag = False #flag para las cabeceras
  21. for row in reader:
  22.     if flag:
  23.         print row[0]
  24.     else:
  25.         flag = True #Flag para la primera linea, que es la cabecera
  #13 (permalink)  
Antiguo 09/10/2010, 17:55
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Extraer informacion de internet

pero no si es la version de python que no me deja importar el cStringIO, tengo Python 3.1 la ultima version

oye eres genial me sirvio con el primer metodo, voy a ver si ahora si puedo hacer mi programa, que es definir una funcion que me de como resultado una lista de tuples con la fecha y el valor de la accion de ese dia. Si tengo otra pregunta te puedo molestar otra vez?

Muchas gracias
  #14 (permalink)  
Antiguo 09/10/2010, 18:03
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Extraer informacion de internet

En ese caso haz un simple:
Código Python:
Ver original
  1. import io
  2. io.StringIO()

Acabo de darme cuenta que StringIO lo cambiaron, pero todavía esta.
  #15 (permalink)  
Antiguo 09/10/2010, 18:25
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Extraer informacion de internet

oye gracias, voy a ensayar, el problema es que no puedo utilizar modulos o funciones que no han explicado por eso me quedo con el primer metodo, pero lo tengo en cuenta para mas adelante. gracias

Etiquetas: extraer, informacion, internet
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:38.