Skip to content

Instantly share code, notes, and snippets.

@danilovazb
Created September 30, 2014 13:22
Show Gist options
  • Save danilovazb/03fae9a7c4900fa245a3 to your computer and use it in GitHub Desktop.
Save danilovazb/03fae9a7c4900fa245a3 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
import urllib2
from bs4 import BeautifulSoup
# Abre a pagina principal do IBGE onde contem os links para os estados.
html = urllib2.urlopen('http://cidades.ibge.gov.br/xtras/home.php').read()
# Pega o conteudo da pagina em HTML e joga para o BeautifulSoup mapear as tags
soup = BeautifulSoup(html)
# Apenas um contador para verificar se o loop esta correto e pegando os 27 estados do pais
a = 1
# For, pegando os links. Ele busca no codigo HTML todas as tags que começam com "<a"
# exemplo: <a href="../xtras/uf.php?lang=&coduf=12&search=acre" title="Acre">AC</a></li>
# Ele vai buscar todo o conteudo de tags de links
for link in soup.find_all('a'):
# Aqui podemos ver também que ele faz um get para pegar o conteúdo da href
# ou seja, o que estiver entre aspas em href ele vai trazer como texto.
# no caso do exemplo acima, ele vai trazer ../xtras/uf.php?lang=&coduf=12&search=acre
pagina = link.get('href')
# Eu coloquei esse IF para distinguir as URLs, assim ele me traz apenas as URLs
# que contem uf.php que é o que nos interessa para pegar os estados.
if "uf.php" in pagina:
# Aqui foi feito um "pulo do gato" para conseguir extrair o conteudo e fazer uma juncao
# com a pagina principal para acessar o link, note que ele traz "../xtras/uf.php?lang=&coduf=12&search=acre"
# o que eu fiz foi fazer um split para separar em um vetor tudo que vem antes de "xtras/" e depois dele.
# Assim pegamos apenas o final e concatenamos com o link certo da pagina.
pagina = pagina.split('xtras/')[1]
# Na variavel abaixo é feita a concatenacao.
url = "http://cidades.ibge.gov.br/xtras/"+pagina
# Aqui nos abrimos uma nova pagina com o conteudo coletado, assim fica automatico
# a navegacao nos links de estados.
html = urllib2.urlopen(url).read()
print a
a+=1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment