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: 89.513 ]

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

Embutindo imagens nos scripts Python para aplicações Tkinter

Download de Arquivos com Verificação do Hash SHA 256

Alimentando Desktopcouch com Zeitgeist

rwd - Restart When Down

Crie um bot para Telegram e gerencie a escala de plantonistas

  
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