Skip to content

Anderson Berg

Como criar parsers HTML com BeautifulSoup

December 31, 2011

Neste post você vai aprender como criar um parser pra recuperar informações de páginas HTML utilizando o BeautifulSoup. O BeautifulSoup pode ser usado para arquivos HTML ou XML, com ele fica muito simples navegar e buscar textos em páginas HTML. Uma grande vantagem da BeautifulSoup é que ela consegue criar uma estrutura mesmo com páginas html mal formatadas, facilitando o trabalho do programador.

Instalando o BeautifulSoup

Você pode fazer a instalação via pip ou easy_install. Também estão disponíveis pacotes em diferentes distribuições Linux.

Inicie o interpretador Python para testar os códigos que vamos apresentar a seguir.

Para processar páginas HTML, importe o BeautifulSoup da seguinte forma:

from BeautifulSoup import BeautifulSoup

Se você for processar arquivos XML:

from BeautifulSoup import BeautifulStoneSoup

Você pode também consultar a documentação do BeautifulSoup aqui.

Criando o parser

Por enquanto vamos processar apenas páginas html. Vamos usar a biblioteca urllib2 para recuperar uma página html.

import urllib2
pagina = urllib2.urlopen("http://www.globo.com").read()

Isso vai criar uma string com todo o código html da página. Então, para criar o parser basta:

soup = BeautifulSoup(pagina)

É possível transformar esse objeto BeautifulSoup em string com o método prettify, que manipula o código bruto adicionando quebra de linha e espaçamento recriando a estrutura do código html.

soup.prettify()

Para listar todos os links da página recuperada, usamos o método findAll:

links = soup.findAll('a')

Neste código, ’links’ é uma lista contendo objetos do tipo Tag da biblioteca BeautifulSoup (class BeautifulSoup.Tag). Vamos agora, listar somente os links (tirando qualquer texto ou marcação) que estão nesses objetos Tag:

for link in links:
print link['href']

Para recuperar somente uma área da página, é possível usar o método find com o parâmetro id, por exemplo:

colunas = soup.find(id="glb-area-colunas")
linkscol = colunas.findAll('a')
for link in linkscol:
print link['href']

A biblioteca BeautifulSoup facilita muito na hora de criar parsers e crawlers para páginas html ou xml. Usada junto com o urllib2 são poderosos aliados na recuperação de informação na web.


Desenvolvedor Python