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.990 ]

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


O módulo urllib2



Nativo da linguagem Python, o módulo urllib2 permite o uso de diversas funções de alto nível para lidar com o acesso à internet. Suas funcionalidades permitem obter o código-fonte de uma página, efetuar autenticação em um site, enviar informações para um script CGI, lidar com conexões que passam por proxies, manipular cookies, etc.

Serão utilizadas algumas funções deste poderoso módulo para obter o código-fonte das páginas utilizadas nos exemplos deste artigo.

Para se importar o módulo, usa-se a linha:

import urllib2

Para simplificar o nome do módulo e evitar erros de digitação, podemos criar uma referência que funciona como um "apelido" para o módulo:

import urllib2 as url #Permite que os métodos do módulo urllib2 sejam acessados na forma url.método()

Principais métodos do módulo:

urllib2.urlopen(url , [dados] , [timeout])

Abre a URL fornecida. Ela pode ser uma string ou um objeto da classe Request. O argumento opcional "dados" permite o envio de dados adicionais para o servidor, podendo receber o valor None caso não haja a necessidade de se enviar alguma informação extra. Também opcional, o argumento timeout determina o tempo, em segundos, que será aguardado para que a conexão seja estabelecida.

Caso a conexão não possa ser estabelecida ou o timeout se encerre, será disparada uma exceção do tipo URLError. A exceção pode ser tratada com os blocos try/except:

try:
   urllib2.urlopen('http://www.vivaolinux.com.br')
except URLError:
   print 'Falha na conexão!'
   exit(1) #interrompe  a execução do programa

Podemos obter o código fonte de uma página, linha a linha, utilizando apenas o método urlopen(). Segue abaixo um exemplo (observe que é importante definir a codificação na primeira linha, pois o código fonte obtido poderá possuir acentos e outros caracteres não suportados):

#coding: UTF-8
#Exibe a primeira linha em que ocorre o termo "Ubuntu" no site vivaolinux.com.br
for linha in urllib2.urlopen('http://www.vivaolinux.com.br'):
   if 'Ubuntu' in linha:
      print linha
      break

Caso seja preciso exibir todo o código HTML de um site, é mais prático utilizar o método read():

#coding: UTF-8
#Exibe o código-fonte do site vivaolinux.com.br
conexao = urllib2.urlopen('http://www.vivaolinux.com.br')
print conexao.read()

O método read() pode receber um argumento, que determinará até quantos bytes serão retornados.

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

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

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

Leitura recomendada

Pydev - Preparando o Eclipse para o Python

Monitorando produtos no ML com Python 3 via BeautifulSoup

Gerar Códigos QRCode com Python

Como criar um keylogger em Python

Como isolar seus projetos Python com virtualenv (ambiente virtual)

  
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