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>'