terça-feira, 13 de agosto de 2013

     Tão interessante quanto navegar na internet é encontrar informações relevantes e conseguir armazená-las de forma ágil e eficiente. E, novamente, é possível desenvolver uma solução interessante utilizando Python e a biblioteca Beautiful Soup.  


     Segundo a Wikipédia, um web crawler, em português rastreador web, é um programa de computador que navega pela rede de uma forma metódica e automatizada e também podem ser usados para obter tipos específicos de informação das páginas da Web.

     No post de hoje, vamos criar um web crawler para extrair todas as palavras que estão em negrito no post Python - Manipulando Strings - Extraindo uma data de uma string. É importante ter algum conhecimento básico de HTML para poder entender como a informação está estruturada dentro de uma página na web. Para começarmos, após instalar o Beautiful Soup (você pode fazer o download aqui) vamos escrever as seguintes linhas de código:


import urllib2
from bs4 import BeautifulSoup

nextLink = 'http://artedosdados.blogspot.com.br/2013/08/python-manipulando-strings-extraindo_6.html'

try:
     c = urllib2.urlopen(nextLink)
     soup = c.read( )
     soup = BeautifulSoup(soup)
     print soup.title.string
     print '------------------------------------------'
     print
     print

except:
     print '--- ERRO NA ABERTURA DA PAGINA ---', sys.exc_info()[0]


     Começamos importando a biblioteca urllib2, para abrirmos o link desejado e o Beautiful Soup. Em seguida, inserimos a url que vamos capturar na variável nextLink. No bloco de tratamento de exceções (leia sobre no post Python - Erros e Tratamento de Exceções), abrimos nossa url e a inserimos na varável c, para então fazermos sua leitura e armazenar na variável soup.  Na sequência, chamamos a função BeautifulSoup que conterá todo o código HTML da página carregada em soup. 

     Na linha print soup.title.string, extraímos nossa primeira informação da página: o título. Veja que solicitamos apenas a string da tag title, presente no código que está armazenado em soup. A informação que veremos na tela é a seguinte:


     Se alguma coisa der errado, o tratamento de exceções entrará em ação e mostrará o erro.

     Continuando, vamos para a sequência de código:

tags = soup.find_all('b')

for tag in tags:
print tag.string
print
print

     Aqui, armazenamos em tags todas as informações das tags <b></b> do código HTML armazenado na variável soup, utilizando find_all('b'). No laço for, varremos o conteúdo de tags e mostramos na tela o conteúdo de texto da tag <b></b>.  Como exemplo, na tag <b> Hoje é quarta-feira</b>, o comando tag.string retornará a string "Hoje é quarta-feira". Assim, como resultado do nosso código temos:


     As expressões mostradas na tela são todas as palavras destacadas em negrito no post  Python - Erros e Tratamento de Exceções.
     
      Como vimos, é muito simples extrair informações com Python e o Beautiful Soup. Claro que este é um exemplo de uma aplicação simples e você deve estar se perguntando: "onde terei complexidade na hora de desenvolver meu web crawler?". A resposta está no código da página que você terá que trabalhar. Antes de começar seu desenvolvimento, você deverá realizar um estudo prévio da página que deseja extrair os dados, para conhecer como e onde está alocada a informação que você precisa. Só então você criará o código que atende sua necessidade. Esta é a arte em extrair informações da web.

    Nos próximos posts mostraremos outras funções do Beautiful Soup, e faremos uma aplicação que armazenará no MongoDB os dados coletados. Bons estudos!


2 comentários: