Python: automatizando a extração de informações na web com expressões regulares

Presenciamos uma grande necessidade e valorização de soluções para recuperação, filtragem e organização de informações da Internet. O presente artigo pretende ilustrar, de forma didática, como automatizar a obtenção de informações dinâmicas em páginas web utilizando a linguagem Python e seu amplo suporte a expressões regulares.

[ Hits: 87.987 ]

Por: Rafael José de Alencar Almeida em 16/09/2009 | Blog: http://www.rafael-labs.com


O módulo re



As expressões regulares são uma forma concisa e eficiente de se encontrar padrões de caracteres em um texto. A linguagem Python possui um amplo suporte para o uso de ER's, que será utilizado nos exemplos deste artigo para filtrar o código HTML obtido com as funções da biblioteca urllib2.

Ao se criar uma expressão regular em Python, é importante definí-la como uma "raw string", o que evita seu pré-processamento pela linguagem e reduz a necessidade de escapar diversos caracteres especiais. Para isso, basta inserir um "r" antes da string:

expressao = r'^Linux'

Para buscar em uma string um padrão que "case" com uma determinada ER, utiliza-se o método search:

busca = re.search(expressao , string)

Este método retorna somente a primeira ocorrência do padrão encontrado na string. Caso não encontre o padrão, é retornado o valor None.

Para se exibir o padrão encontrado, utiliza-se o método group(), da seguinte forma:

print busca.group(0) #Todo o trecho "casado"
print busca.group() #Todos os grupos "casados"
print busca.group(1) #Primeiro grupo "casado"
print busca.group(3) #Terceiro grupo "casado"

Exemplo:

busca = re.search(r'(<h3>)([1-9]{4})(</h3>)' , '<a href=\"www.exemplo.com\"><h3>1988</h3></a>')
print busca.group(0) #exibe: <h3>1988</h3>
print busca.group(2) #exibe: 1988

Para se obter todas as ocorrências de um padrão em uma string, utiliza-se o método findall(), que retorna uma lista com todas as ocorrências encontradas.

frase = 'O rato roeu a roupa do rei de Roma.'
busca = re.findall(r'r[aeo]' , frase) # "r" seguido de "a", "e" ou "o"
print busca

#Saída: ['ra', 'ro', 'ro', 're']

Também é possível compilar uma expressão regular, o que torna sua execução mais rápida caso seja utilizada várias vezes no programa. A compilação retornará um objeto que possuirá os mesmos métodos do módulo re:

exp = re.compile(r'r[aeo]')
print exp.findall(frase)

Sobre os exemplos

As próximas páginas contém exemplos comentados utilizando os métodos dos módulos urllib2 e re. É importante destacar que, no universo da programação elegante em Python, os programas de exemplo com certeza podem ser reescritos de formas muito mais compactas e com maior desempenho. Entretanto, por questões de clareza, os códigos foram estruturados de modo a facilitar a leitura e compreensão de usuários com conhecimentos básicos da linguagem Python.

Para facilitar o entendimento, o primeiro exemplo será mais detalhado, com interações do usuário e validações. Para não aumentar excessivamente os demais códigos, os outros exemplos não lidam com entradas dos usuários, tratamento das mesmas e tratamento de exceções.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. O módulo urllib2
   3. O módulo re
   4. Obtendo informações sobre o tempo em uma cidade brasileira
   5. Obtendo a última postagem de um perfil no Twitter
   6. Realizando o download de uma imagem dinâmica
   7. Obtendo o resultado de buscas no Google
   8. Conclusão
Outros artigos deste autor

Automatizando a criação de uma base de conhecimento em Prolog para gerenciar os acessos a um site

Esteganografia e Esteganálise: transmissão e detecção de informações ocultas em imagens digitais

Leitura recomendada

Alimentando Desktopcouch com Zeitgeist

Criando Speed Test com Python

Gerar Códigos QRCode com Python

Python - Threads

Pydev - Preparando o Eclipse para o Python

  
Comentários
[1] Comentário enviado por valdineisantos em 16/09/2009 - 16:21h

Muito bom seu texto. Como você comentou o BeautifulSoap é bastante util eu sempre procuro pelos elementos da página com ele e não com expressões regulares embora o resultado final seja exatamente o mesmo.

Parabens.

[2] Comentário enviado por wryel em 16/09/2009 - 17:35h

eu fiz essas coisas com o curl do linux uns tempos atras, cheguei a achar a lib pycurl na net mas não tava conseguindo importar pra dentro dos projetos ;|

maior mão na roda seu tutorial =0

[3] Comentário enviado por forkd em 17/09/2009 - 10:17h

Excelente artigo, parabéns!

Poxa, legal ver mais alguém de Barbacena por aqui!
Como eu, é entusiasta de Linux e Python!
Mande um abraço pro prof. Herlon lá na EAFB!

Abraço!

[4] Comentário enviado por jmurray em 26/08/2010 - 09:34h

Era somente isso que faltava para mim migrar para o Linux por definitivo. O que me prende no Windows era a automatização de tarefas para a internet !

[5] Comentário enviado por iKaleo em 09/03/2016 - 15:45h

Estou aprendendo python e php sei uma base por cima também , precisava criar um script em python ou outra se alguem conseguir me ajuda . O programa tem que amarzena um url exemplo var=web.browser.open(http://www.empresa.com.br) quero que quando o usuario digite o site que é empresa e o python vai ficar rodando em segundo plano , assim que o cliente acessar o link ele sera automaticamete rederecionado para meu outro site para ter um controle . alguem tem algum ideia de como posso fazer isso ?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts