Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola a todos, a ver si alguien puede echarme una mano, me gustaria extraer datos de una cadena de caracteres (formateada como XML) en Python.
La cadena es la siguiente:
HTTP/1.1 200 OK
Date: Sun, 19 Nov 2006 13:00:20 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 1166
<xml><soap><soap><GetPasoParadaREGResponse><GetPasoParadaREGResult>
<PasoParada><cabecera>false</cabecera>
<e1><minutos>3</minutos><metros>675</metros><tipo>NORMAL</tipo></e1>
<e2><minutos>20</minutos><metros>4141</metros><tipo>NORMAL</tipo></e2>
<linea>05</linea><parada>200</parada><ruta>PRADO PTA.TRIANA </ruta></PasoParada>
<PasoParada><cabecera>false</cabecera>
<e1><minutos>1</minutos><metros>164</metros><tipo>NORMAL</tipo></e1>
<e2><minutos>23</minutos><metros>6309</metros><tipo>NORMAL</tipo></e2>
<linea>06</linea><parada>200</parada><ruta>BARQUETA S.LAZARO </ruta></PasoParada>
<PasoParada><cabecera>false</cabecera>
<e1><minutos>17</minutos><metros>3440</metros><tipo>NORMAL</tipo></e1>
<e2><minutos>17</minutos><metros>3411</metros><tipo>NORMAL</tipo></e2><linea>C1</linea><parada>200</parada><ruta>CARTUJABARQUETA
</ruta></PasoParada></GetPasoParadaREGResult>
<status>1</status></GetPasoParadaREGResponse></soap></soap>
Basicamente lo que quiero es extraer los datos que estan entre las etiquetas (<etiqueta>dato</etiqueta>), en C creo que sabria hacerlo, pero python tiene una forma algo distinta de tratar las cadenas, ademas se supone que python trae librerias especializadas en Xml, pero no doy con la tecla
Pd.- Esa es la respuesta del servidor de Tussam (La empresa de autobuses urbanos de Sevilla) http://www.infobustussam.com:9001/ en concreto da informacion sobre los tiempos de llegada de los autobuses a una parada. La finalidad del programa es que me avise del momento optimo para salir del piso para coger el autobus sin esperar demasiado y que llege a tiempo al destino (tiempo piso-parada+ tiempodellegadadelbussacadodeinternet+ tiempomedioparada-destino) el primer y ultimo dato seran en principio "empiricos", siendo el de enmendio el que intento extraer de la pagina que e puesto arriba
Saludos
Y el codigo que muestra esa cadena es:
import telnetlib
HOST = "www.infobustussam.com"
PORT = 9001
LINEA = "6"
PARADA = "200"
telnet = telnetlib.Telnet(HOST, PORT)
##Lo que viene a bajo es el resultado de capturar los paquetes entre el pc y el servidor de tussam
telnet.write("""POST /services/dinamica.asmx HTTP/1.1
Host: www.infobustussam.com:9001
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1) Gecko/20061010 Firefox/2.0
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Referer: http://www.infobustussam.com:9001/linea ... iones2.swf
Content-type: text/xml; charset=utf-8
SOAPAction: " http://tempuri.org/GetPasoParadaREG "
Content-length: 402
<?xml version="1.0" encoding="utf-8"?><SOAP-ENV:Envelope xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd=" http://www.w3.org/2001/XMLSchema " xmlns:SOAP-ENV=" http://schemas.xmlsoap.org/soap/envelope /"><SOAP-ENV:Body><GetPasoParadaREG xmlns=" http://tempuri.org/ ">""")
telnet.write("""<linea>C1</linea><parada>"""+PARADA+"""</parada><medio>3</medio><status>0</status></GetPasoParadaREG></SOAP-ENV:Body></SOAP-ENV:Envelope>""")
Coco = telnet.read_until("coco",timeout=2) ##Coco es un nombre comodin para la variable, podia haber sido "yogu de platano" igualmente
telnet.close ##la conexion por defecto es una "keep alive" (aunque yo no quiera) asi que forzamos el cierre de la conexion
print Coco
que maravilla con Amara, esto ya tiene otro color, si esque tenia que haber preguntao antes 😀
Muchas gracias Dem
Pd.- cuando tenga terminada esta parte cuelgo el codigo 😉
así me gusta, colgando el código garrocha.
Lo estaremos esperando