Acessar páginas via código Python

Em Desenvolvimento e TI por Alex Benfica

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. O código Python será um aliado na hora de fazer isso.

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 JavaScript, 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.

Leia também

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.

Compilando informações com o Python

Usar o código Python pode facilitar bastante na hora de buscar informações da web e, a partir daí, criar os mais diversos relatórios para seu trabalho. (Foto: harshtechtalk.com)

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:

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 você está começando a aprender programação, teste e analise o relatório gerado para conseguir aprender algumas novas habilidades.

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?

Sobre o autor

Autor Alex Benfica

Profissional de TI com mais de 20 anos de experiência na indústria. Bacharel em Matemática Computacional, sempre aprendendo sobre tecnologia, desenvolvimento de software e automação. É criador do site Palpite Digital onde compartilha conhecimentos desde 2007!

6 comentários para: “Acessar páginas via código Python”

  • Darth

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

    Responder
    • Equipe Palpite Digital

      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.

      Responder
  • Guilherme Kuhn

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

    Parabéns, Abraços!

    Responder
  • Bob

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

    Responder
  • Kawai Brito

    Olá, programo em C e gostaria de saber se tem como fazer um código em C que abra uma página da web e coloque dentro de uma caixa de texto um texto?

    Responder
    • Equipe Palpite Digital

      Ter tem, mas você tem que procurar isso em fóruns de programação, onde vai ser mais fácil achar essa informação.

      Responder

Deixe um comentário