example - ¿Cómo analizo una cadena de fecha HTTP en Python?
strftime python (3)
¿Hay alguna manera fácil de analizar cadenas de fechas HTTP en Python? De acuerdo con el estándar , hay varias formas de formatear cadenas de fechas HTTP; el método debería ser capaz de manejar esto.
En otras palabras, quiero convertir una cadena como "Mié, 23 Sep 2009 22:15:29 GMT" a una estructura de tiempo de python.
>>> import datetime
>>> datetime.datetime.strptime(''Wed, 23 Sep 2009 22:15:29 GMT'', ''%a, %d %b %Y %H:%M:%S GMT'')
datetime.datetime(2009, 9, 23, 22, 15, 29)
>>> import email.utils as eut
>>> eut.parsedate(''Wed, 23 Sep 2009 22:15:29 GMT'')
(2009, 9, 23, 22, 15, 29, 0, 1, -1)
Si desea un objeto datetime.datetime
, puede hacer:
def my_parsedate(text):
return datetime.datetime(*eut.parsedate(text)[:6])
httplib.HTTPMessage(filehandle).getdate(headername)
httplib.HTTPMessage(filehandle).getdate_tz(headername)
mimetools.Message(filehandle).getdate()
rfc822.parsedate(datestr)
rfc822.parsedate_tz(datestr)
- si tiene una secuencia de datos sin procesar, puede construir un HTTPMessage o un mimetools.Message a partir de él. puede ofrecer ayuda adicional mientras consulta el objeto de respuesta para obtener información
- si está utilizando urllib2, ya tiene un objeto HTTPMessage oculto en el manejador de archivos devuelto por urlopen
- Probablemente puede analizar muchos formatos de fecha
- httplib está en el núcleo
NOTA:
- Echa un vistazo a la implementación, HTTPMessage hereda de mimetools.Message que hereda de rfc822.Message. dos defs flotantes son de su interés tal vez, parsedate y parsedate_tz (en este último)
- parsedate (_tz) de email.utils tiene una implementación diferente, aunque se ve más o menos igual.
puedes hacer esto, si solo tienes ese trozo de cuerda y quieres analizarlo:
>>> from rfc822 import parsedate, parsedate_tz
>>> parsedate(''Wed, 23 Sep 2009 22:15:29 GMT'')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
>>>
pero déjame ejemplificar a través de mensajes de mimo:
import mimetools
import StringIO
message = mimetools.Message(
StringIO.StringIO(''Date:Wed, 23 Sep 2009 22:15:29 GMT/r/n/r/n''))
>>> m
<mimetools.Message instance at 0x7fc259146710>
>>> m.getdate(''Date'')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
o a través de mensajes http (respuestas)
>>> from httplib import HTTPMessage
>>> from StringIO import StringIO
>>> http_response = HTTPMessage(StringIO(''Date:Wed, 23 Sep 2009 22:15:29 GMT/r/n/r/n''))
>>> #http_response can be grabbed via urllib2.urlopen(url).info(), right?
>>> http_response.getdate(''Date'')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
¿derecho?
>>> import urllib2
>>> urllib2.urlopen(''https://fw.io/'').info().getdate(''Date'')
(2014, 2, 19, 18, 53, 26, 0, 1, 0)
allí, ahora ahora más sobre formatos de fecha, mensajes de mimo, herramientas de mímica y su implementación pythonic ;-)
cualquiera sea el caso, se ve mejor que usar email.utils para analizar encabezados http.