#!/usr/bin/python URL = "http://www.prefeitura.unicamp.br/pref/servicos/restaurantes-carda.html" ARQ = "/home/gustavo/public_html/bandex.wml" # Módulos utilizados: import sys import re from urllib import * from htmlentitydefs import entitydefs # Pega a página com cardápio: print >> sys.stderr, "Aguarde enquanto pego o cardápio de %s ..." % URL , page = urlopen( URL ) html = page.read() page.close() print >> sys.stderr, "Feito!" ################################################################################ # Expressões regulares: Black Magic # # Vide: http://www.python.org/doc/2.3/lib/module-re.html # ################################################################################ # Limpa algumas tags inúteis (pra nós): # , ,
,
html = html.replace( "\r", "" ) html = re.sub( "<(span|b|div|p|tbody) *[^>]*>", "", html ) html = re.sub( "", "", html ) # Pega os dados da página valores = re.search( "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+
\s*$\\\n" + \ "^\s+(?P\S+)\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+(?P\w+)\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+(?P\w+)\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+(?P\w+)\s*$\\\n" + \ "^\s+\s*$\\\n" + \ "^\s+(?P\d{2}/\d{2})\s*$\\\n" + \ "^\s+
\s*$\\\n" + \ "^\s+(?P[^<]+)" + \ "^\s+\s*$\\\n" + \ "^\s+(?P[^<]+)" + \ "^\s+\s*$\\\n" + \ "^\s+(?P[^<]+)" + \ "^\s+\s*$\\\n" + \ "^\s+(?P[^<]+)" + \ "^\s+\s*$\\\n" + \ "^\s+(?P[^<]+)" + \ "^\s+
", html, re.MULTILINE | re.DOTALL ) # Transcreve valores para um dicionário (hash, ie: # valor[ "value0" ] == prato do dia) # E ainda remove espaços duplos, \n e etc... re_limpa = re.compile( "( {1,}|\\\n)", re.MULTILINE ) def limpa_texto( texto ): # Troca &; pelo valor correspondente, ie: ã -> ã for e in entitydefs: if e != "amp": # Não converte & -> & texto = texto.replace( "&" + e + ";", entitydefs[ e ] ) # chama 2 vezes re_limpa.sub( ... re_limpa.sub( .. ) ) # para tirar os espaços duplos texto = re_limpa.sub( " ", re_limpa.sub( " ", texto.strip() ) ) return texto # limpa_texto() valor = { } if valores: for v in valores.groupdict(): valor[ v ] = limpa_texto( valores.group( v ) ) # Fazer alguma coisa com valor, exemplo: #print "Refeição: %s" % valor[ "label0" ] #print "Prato principal: %s" % valor[ "value0" ] #for i in range( 1, 4 ): # print "%s: %s" % ( valor[ "label%d" % i ], valor[ "value%d" % i ] ) # No caso do wap, vc gera o documento, vide http://www.wapforum.org # Eu não manjo disto pq nunca mexi... mas fiz isso baseado numa parte do Freevo # Ah, e foi mal usar strings mult-line ( """ ... """ ), mas ficar digitando concatenação # enche o saco... # Cabeçalho WAP html = \ """

%s %s

Prato Principal: %s

""" % ( valor[ "label0" ], valor[ "label4" ], valor[ "value0" ] ) # Imprime os acompanhamentos: for i in range( 1, 4 ): html += """ %s: %s
""" % ( valor[ "label%d" % i ], valor[ "value%d" % i ] ) # Rodapé WAP html += \ """

""" # ae vc faz alguma coisa com esta página, por exemplo grava na sua área... page = open( ARQ, "w") page.write( html ) page.close()