Palpite Digital

Aproveite melhor a internet e a tecnologia

Acessar páginas via código Python

Como acessar páginas e buscar informações online usando um programa escrito em Python? Como fazer o login em páginas para montar relatórios e integrar sistemas?

Se você é um programador web ou que está começando agora a programar para a web, logo vai ter a necessidade de realizar este tipo de tarefa.

As páginas web funcionam através de requisições. Ao digitar um endereço eletrônico em seu navegador, ele será traduzido para um endereço IP através do servidor DNS e após isto, será feita uma requisição ao servidor web que estiver neste endereço IP, enviando-se a URL digitada e outros dados. Para cada URL enviada, o servidor irá responder com um conteúdo diferente. Se o conteúdo for um arquivo javascritp, ele poderá ser interpretado pelo navegador que fará mais requisições, até que a página esteja toda completa. Pode parecer simples, mas muita coisa tem que funcionar em conjunto para que uma página de um site possa ser carregada.

Mas e se você precisar buscar as informações de uma página para montar uma planilha ou gerar um relatório padrão, com o logotipo da sua empresa, por exemplo? Quando o sistema online não provê uma API, muitas vezes a única maneira de se fazer isso é abrir a página e copiar o conteúdo, colando na planilha ou documento de destino. Pior ainda quando os formatos são muitos diferentes e é necessário digitar cada um dos dados.

Para resolver este problema, podem ser feitos programas para automatizar tais tarefas. Neste artigo falarei de bibliotecas em Python que buscam dados automaticamente em páginas da internet, com ou sem necessidade de login para utilização.

No Linux o interpretador Python é instalado por padrão, e várias bibliotecas já vem junto. O suporte ao Python é por isso considerado nativo no Linux. As principais distribuições vêm com o Python pra instalado.

Quando comecei a programar um sistema que buscava informações em páginas web, primeiramente pensei em fazer tudo eu mesmo, usando a biblioteca urllib e urllib2, uma lib Python de alto nível para navegação web. Porém, tratar manualmente os cookies, e demais parâmetros de login, redirecionamentos se mostrou um verdadeiro pesadelo. Se não era difícil era ao menos muito trabalhoso.

Saí então à busca de algo mais mastigado para realizar esta tarefa em encontrei um script chamado Twill. O Twill na verdade era uma camada sobre a urllib e outras libs que facilitava o processo de nevegar na web via código. O Twill funcionou até bem, exceto em páginas em que haviam muitos redirecionamentos durante o login. Nestes casos, não consegui fazer com o que mesmo funcionasse. Fui analisando o código fonte do Twill em busca da solução e vi que ele era na verdade uma implementação de um cliente para o Mechanize, a verdadeira camada que chamava as funções da urllib. Além disso o Twill não estava sendo atualizado há muito tempo.

Parti então para o Mechanize e obtive muito sucesso. A instalação é simples demais e os comandos diretos. Os redirecionamentos, cookies, formulários e vários outros objetos da páginas são facilmente acessíveis.

Para instalar o mechanize e no Ubuntu e algumas outras libs que ele utiliza, execute cada um dos comandos abaixo:

  • sudo apt-get install python-setuptools
  • sudo easy_install mechanize
  • sudo easy_install html2text
  • sudo easy_install BeautifulSoup

Veja um exemplo simples de como utilizar o Mechanize (em Python)

import mechanize
import cookielib
#cria um navegador, um browser de codigo...
br = mechanize.Browser()
url = 'http://boo-box.com/site'
email = 'seuemail@delogin'
senha = 'suasenha'
# Prepara para tratar cookies...
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Ajusta algumas opções do navegador...
br.set_handle_equiv(True)
br.set_handle_gzip(False)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# Configura o user-agent.
# Do ponto de vista do servidor, o navegador agora o Firefox.
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11;\
 U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615\
Fedora/3.0.1-1.fc9 Firefox/3.0.1')]      
# Pronto! Agora é navegar, acessando a URL usando o método HTTP GET
br.open(url)
# Se existirem formulários, você pode selecionar o primeiro (#0), por exemplo...
br.select_form(nr=0)
# Para mostrar os formularios e ver os campos a serem preenchidos,
# use um for sobre o br.forms()
for f in br.forms():
   print f
# Preencher o formulário com os dados de login...
br.form['email'] = email
br.form['password'] = senha
# Enviar o formulário usando o método HTTP POST
br.submit()       
# E finalmente, busque o HTML retornado:
html = br.response().read()

Fácil, nao? Com este HTML você pode usar expressões regulares ou mesmo outros métodos da lib Mechanize para encontrar links e elementos! Funciona bem e é rápido. Observe que os códigos javascript NÃO são interpretados. Então em algumas páginas que são baseadas em javascript, é necessário que você interprete o código javascript para saber quais URL’s deve requisitar!

Se gostou do artigo, envie para seus amigos e comente nos dizendo que tipo de sistema você está tentando fazer! Quem sabe não podemos ajudar?

Categorias:


4 pessoas comentaram!

Darth

setembro 22nd, 2010 às 01:17

Muito legal e pode me ajudar muito no programinha que eu to fazendo em Python.
Mas eu to com um problema pra usar ele, após baixar como eu faço pra poder usar no Python e importar o modulo mechanize?

Palpite

setembro 23rd, 2010 às 16:28

Olá Dhart.
Se não me engano, você precisa colocar o diretório “mechanize” em /usr/lib/python x.x/site-packages/
Por favor tente e nos diga aqui se funcionou.
De qualquer forma, atualizei o artigo e agora coloquei os comandos necessários para instalar o mechanize.
Usar os comandos listados irá fazer a instalação e configuração automaticamente.

Guilherme Kuhn

fevereiro 24th, 2011 às 13:48

Muito interessante este artigo,
Já está nos meus favoritos.

Parabéns, Abraços!

Bob

dezembro 23rd, 2011 às 00:33

Valeu cara, acho que esse seu post vai ser a chave pra um programa que eu to querendo fazer pra passar o tempo nas férias. Valeu mesmo!

Comente e participe !

X
Dicas quentes por e-mail!