Porém preciso que este gere um xml pra cada voo.
Como faço?
Uso:
importação Infraero
infra Infraero.Harvester = ()
vôo = infra.request_flight ('SBSP', 3100)
aeroporto = infra.request_airport ('SBSP')
'' '
__all__ = [ 'ceifa' , 'Formater' ]
importar cookielib
importação urllib2
importar urllib
de HTMLParser importação HTMLParser
importar re
classe RequestVarsHTMLParser ( HTMLParser ):
def __init__ ( auto ):
HTMLParser . __init__ ( auto )
auto . requestvars = []
def handle_starttag ( auto , tag , attrs ):
se ( tag == 'input' ):
dic = dict ( attrs )
se dic . obter ( 'nome' ) em [ '__VIEWSTATE' , '__EVENTVALIDATION' ]:
auto . requestvars . append ( tuple ([ dic . obter ( 'nome' ), dic . obter ( 'valor' )]))
def get_request_vars ( auto ):
retornar auto . requestvars
classe FlightDataHTMLParser ( HTMLParser ):
def __init__ ( auto ):
HTMLParser . __init__ ( auto )
auto . OpenSpan = ''
auto . openpagination = False
auto . flightdata = []
auto . vôos = []
auto . pagedate = ''
auto . pagemax = 0
auto . re_name = re . compilação ( "_ ([^ _] *) (_voo |) $" )
auto . re_page = re . compilação ( "javascript: __doPostBack \ ('grd_voos', 'Página \ $ ([0-9] +)' \)" )
def handle_starttag ( auto , tag , attrs ):
auto . OpenSpan = ''
se ( tag == 'extensão' ):
dic = dict ( attrs )
se ( dic . has_key ( "id" )):
se ( dic . obter ( "id" ) . startswith ( 'grd_voos_ctl' ) ou ( dic . obter ( "id" ) == 'lbl_data_pagedate' )):
auto . OpenSpan = dic . ficar ( "id" )
elif ( tag == 'tr' ):
dic = dict ( attrs )
se ( dic . has_key ( "classe" )):
se ( dic . obter ( "classe" ) == 'pagina' ):
auto . openpagination = Verdadeiro
elif ( auto . openpagination ):
se ( tag == "a" ):
dic = dict ( attrs )
se ( dic . has_key ( 'href' )):
página = auto . re_page . pesquisa ( dic . obter ( 'href' ))
se ( página =! Nenhum ):
página = int ( página . grupo ( 1 ))
se ( página > auto . pagemax ):
auto . pagemax = página
def handle_data ( auto , dados ):
se ( auto . OpenSpan == 'lbl_data_pagedate' ):
auto . pagedate = dados
elif ( auto . OpenSpan =! '' ):
chave = auto . re_name . pesquisa ( auto . OpenSpan ) . grupo ( 1 ) . diminuir ()
auto . flightdata . append ( tupla ([ chave , dados ]))
se ( auto . OpenSpan . startswith ( 'grd_voos_ctl' ) e auto . OpenSpan . endswith ( 'Estado' )):
auto . vôos . anexar ( auto . flightdata )
auto . flightdata = []
se ( auto . OpenSpan =! '' ):
auto . OpenSpan = ''
def get_flights ( auto ):
retornar auto . vôos
def get_date ( auto ):
retornar auto . pagedate
def get_pages ( auto ):
retornar auto . pagemax
classe Harvester :
def __init__ ( auto ):
biscoito = cookielib . cookiejar ()
auto . abridor = urllib2 . build_opener ( urllib2 . HTTPCookieProcessor ( biscoito ))
auto . pagedate = ''
auto . pagemax = 0
auto . requestvars = []
def get_date ( auto ):
retornar auto . pagedate
def get_pages ( auto ):
retornar auto . pagemax
def request_session_page ( auto , url ):
pedido = auto . abridor . abrir ( url , urllib . urlencode ( auto . requestvars ))
dados = pedido . ler ()
analisador = RequestVarsHTMLParser ()
analisador . alimentação ( de dados )
analisador . fechar ()
auto . requestvars = analisador . get_request_vars ()
def request_start ( auto ):
auto . pagedate = ''
auto . request_session_page ( 'http://www.infraero.gov.br/voos/index.aspx' )
def request_intermediate ( auto , alvo ):
gerente = 'atualização |' + alvo
auto . request_start ()
auto . requestvars . append ( tuple ([ 'ScriptManager1' , gerente ]))
auto . requestvars . append ( tuple ([ '__EVENTTARGET' , alvo ]))
auto . requestvars . append ( tuple ([ '__EVENTARGUMENT' , '' ]))
auto . requestvars . append ( tuple ([ 'opcoes' , '0 ' ]))
auto . requestvars . append ( tuple ([ 'pode_pesquisar_aeroporto' , 'S' ]))
auto . request_session_page ( 'http://www.infraero.gov.br/voos/index.aspx' )
def request_data_page ( auto , url ):
pedido = auto . abridor . abrir ( url , urllib . urlencode ( auto . requestvars ))
dados = pedido . ler ()
analisador = RequestVarsHTMLParser ()
analisador . alimentação ( de dados )
analisador . fechar ()
auto . requestvars = analisador . get_request_vars ()
analisador = FlightDataHTMLParser ()
analisador . alimentação ( de dados )
analisador . fechar ()
se ( auto . pagedate == '' ):
auto . pagedate = analisador . get_date ()
se ( auto . pagemax < analisador . get_pages ()):
auto . pagemax = analisador . get_pages ()
voltar analisador . get_flights ()
def request_airport_pages ( auto , aeroporto , página ):
argumento = 'Página $' + str ( página )
auto . requestvars . append ( tuple ([ 'ScriptManager1' , 'update_grid | grd_voos' ]))
auto . requestvars . append ( tuple ([ '__EVENTTARGET' , 'grd_voos' ]))
auto . requestvars . append ( tuple ([ '__EVENTARGUMENT " , argumento ]))
auto . requestvars . append ( tuple ([ 'opcoes' , '0 ' ]))
auto . requestvars . append ( tuple ([ 'dpl_aeroporto' , aeroporto ]))
auto . requestvars . append ( tuple ([ 'txt_num_voo' , '' ]))
auto . requestvars . append ( tuple ([ '__LASTFOCUS' , '' ]))
retornar auto . request_data_page ( 'http://www.infraero.gov.br/voos/index_2.aspx' )
def request_flight ( auto , aeroporto , vôo ):
auto . pagemax = 1
vôo = '' + str ( vôo )
enquanto ( len ( vôo ) < 5 ):
vôo = '0 ' + vôo
auto . request_intermediate ( 'hl_3' )
auto . requestvars . append ( tuple ([ 'ScriptManager1' , 'update | btn_aeroporto' ]))
auto . requestvars . append ( tuple ([ '__EVENTTARGET' , '' ]))
auto . requestvars . append ( tuple ([ '__EVENTARGUMENT' , '' ]))
auto . requestvars . append ( tuple ([ 'opcoes' , '0 ' ]))
auto . requestvars . append ( tuple ([ 'pode_pesquisar_aeroporto' , 'S' ]))
auto . requestvars . append ( tuple ([ 'aeroportos_chegada_1' , aeroporto ]))
auto . requestvars . append ( tuple ([ 'txt_num_voo' , vôo ]))
auto . requestvars . append ( tuple ([ 'txt_water_box_ClientState' , '' ]))
auto . requestvars . append ( tuple ([ 'btn_aeroporto " , "Consultar V \ xc3 \ XB4 os " ]))
retornar auto . request_data_page ( 'http://www.infraero.gov.br/voos/index.aspx' )
def request_airport ( auto , aeroporto ):
auto . pagemax = 1
auto . request_intermediate ( 'hl_1' )
auto . requestvars . append ( tuple ([ 'ScriptManager1' , 'update | btn_aeroporto_3' ]))
auto . requestvars . append ( tuple ([ '__EVENTTARGET' , '' ]))
auto . requestvars . append ( tuple ([ '__EVENTARGUMENT' , '' ]))
auto . requestvars . append ( tuple ([ 'opcoes' , '0 ' ]))
auto . requestvars . append ( tuple ([ 'pode_pesquisar_aeroporto' , 'S' ]))
auto . requestvars . append ( tuple ([ 'aero_companias_1' , aeroporto ]))
auto . requestvars . append ( tuple ([ 'btn_aeroporto_3 " , "Consultar V \ xc3 \ XB4 os " ]))
dados = auto . request_data_page ( 'http://www.infraero.gov.br/voos/index.aspx' )
i = 1
enquanto ( i < auto . pagemax ):
i = i + 1
dados = dados + auto . request_airport_pages ( aeroporto , i )
retornar dados
classe Formater :
def __init__ ( auto , vôos ):
auto . vôos = vôos
def print_table_row ( auto , vôo , cabeça ):
se ( cabeça == verdadeiro ):
hd = 'h'
índice = 0
outra coisa :
hd = 'd'
índice = 1
dic = dict ( vôo )
cor = 'black'
se ( dic . obter ( "status" ) . inferior () == 'Cancelado' ):
cor = 'vermelho'
print '<tr>'
para dados em vôo :
imprimir '<t' + hd + "style =" color: ' + cores + ">"
imprimir dados [ índice ]
print '</ t' + hd + '>'
print '</ tr>'
def print_table ( auto , ID ):
primeiro = verdadeiro
print '<tabela id = "" + ID + ">"
de vôo em auto . vôos :
se primeiro :
print '<thead>'
auto . print_table_row ( vôo , Verdadeira )
print '</ thead> <tbody>'
primeiro = False
auto . print_table_row ( vôo , Falso )
print '</ tbody> </ table>'



Postagens
Male
