Python para extrair informações
Python me tem sido muito útil no dia-a-dia para recuperar grandes quantidades de dados codificadas dentro de sites.
Por exemplo, eu precisava de todos os nomes de cursos de pós graduação da UFC para depois jogar em uns formulário do Joomla. Esses dados podem ser conseguidos neste site da Capes.
Lá os dados estavam assim:
Os nomes dos cursos estavam dentro de células de uma grande tabela, com letras todas em maiúsculo. Tentei copiar e colar um a um, na mão, mas eu vi que eu levaria um eternidade para terminar.
A título de exemplo e por segurança, eu salvei uma cópia da página em questão no nosso servidor, para que o script não falhe.
Então, transformamos esse trabalho chato e repetitivo em algo que o Python pode fazer pra você:
import urllib
pagina = urllib.urlopen("http://eupodiatamatando.com/downloads/cursos.html")
for linha in pagina:
if linha.find("cd_programa") != -1:
tmp = linha.split('>', 1)[1]
nome = tmp.split('< ', 1)[0]
print nome
pagina.close()
A saída desse programa é algo assim:
ADMINISTRAÇÃO DE EMPRESAS
AGRONOMIA (FITOTECNIA)
AGRONOMIA (IRRIGAÇÃO E DRENAGEM)
AGRONOMIA (SOLOS E NUTRIÇÃO DE PLANTAS)
AVALIAÇÃO DE POLÍTICAS PÚBLICAS
BIOQUÍMICA
CIÊNCIAS DA COMPUTAÇÃO
…
Da biblioteca urllib nós usamos o urlopen, que puxou a página e guardou num manipulador chamado pagina, como ele implementa o método next, nós podemos iterar sobre ele usando um simples for. Passamos por todas as linhas e sé há a string “cd_programa” dentro dela, então nós vamos pegar o que está dentro da tag. Claro que foi necessário perceber analisando o código-fonte da página que todas as células que continham o nome de curso possuim essa substring, mas sempre há algo assim.
O método split, que fatia a string, já foi discutido aqui antes.
Você deve estar se perguntando, “Vale a pena criar um programa que lê os dados especificamente de um site e que de uma hora para outra pode parar de funcionar?”. Sim, vale a pena, simplesmente porque com o tempo você vai escrevendo programas em Python cada vez mais rápido. O código só irá rodar uma vez mas no final você economizou tempo, e de uma maneira inteligente.
Por exemplo, se você quiser saber quais são as notícias que estão em cartaz no Br-linux agora:
import urllib
pagina = urllib.urlopen("http://br-linux.org")
for linha in pagina:
if linha.find("node-title") != -1:
tmp = linha.split('>',2)[2]
nome = tmp.split('< ',1)[0]
print nome
pagina.close()
Isso retorna algo assim:
Carregando seus feeds no bolso
Personalize seu teclado com o X e o KDE
Linux na cultura pop: GRUB nos quadrinhos da Marvel
iPod no Linux – guia ilustrado de uso com o Amarok
Feliz dia do Administrador de Sistemas!
…
Experimente usar isso no dia-a-dia, com o tempo você vai ficando bom em achar os padrões e fica fácil extrair semântica de dentro de um site.
Promoção! Livros de Como Programar em Python pelos menores preços você encontra no Buscapé.
Comments are closed.
about 13 years ago
ei, sacanagem! ele stripou parte do que eu escrevi!
o correto eh assim:
—
Python:
# quando achar uma linha com o padrao:
p = re.compile(‘<[^>]+>’)
nome = p.sub(”, linha).trim()
ou se fosse usando shellscript (em uma linha pra fazer tudo):
$ lynx -source http://servicos.capes.gov.br/projetorelacaocursos/jsp/cursoIesDet.jsp?cd_ies=22001018 | grep cd_programa | sed -e ‘s/<[^>]\+>//g’ -e ‘s/^[[:space:]]\+//g’
(eu acho massa essas coisas de uma linha :D)
about 13 years ago
Uma maneira de fazer em Perl:
use LWP::Simple;
$pagina = get “http://eupodiatamatando.com/downloads/cursos.html”;
print “$1\n” while $pagina =~ /cd_programa.*>(.*)
about 13 years ago
Saiu sem o final (deve ter confundido com uma tag)
use LWP::Simple;
$pagina = get “http://eupodiatamatando.com/downloads/cursos.html”;
print “$1\n” while $pagina =~ /cd_programa.*>(.*)</g;
about 13 years ago
Só uma coisa: eu AMEI o nome do blog.
Parabéns!
Beijos de Luz e ótimo domingo.
PS.: eu não entendo NADA de programação, vc nem acreditaria em como vim parar aqui…rs..
Bjs
about 13 years ago
Lady,
Voce pode sempre contribuir com uma receita de bolo, um tutorial de photoshop, uma cortesia pra cinema ou qualquer outra coisa que vc seja boa!
Voce nao acreditaria, mas o povo aqui eh bem ecletico.
about 13 years ago
Tem que substituir os códigos pelo caractere.
import urllib
pagina = urllib.urlopen (“http://eupodiatamatando.com/downloads/cursos.html”)
for linha in pagina:
if linha.find(“cd_programa”) != -1:
tmp = linha.split(‘>’, 1)[1]
nome = tmp.split(‘
about 13 years ago
Não saiu a última parte.
nome = tmp.split(‘
about 13 years ago
Tá difícil!
Aproveita altere o código fonte do blogo para que ele substitua automaticamente alguns caracteres em código, nos comentários!!!
about 13 years ago
nsaraiva,
desculpe-me o a inconveniência, mas acho que isso não é possível.
A extensão que eu uso para colocar highlight nos códigos parece só funcionar para o corpo do post e não para o comentários. Eu vou entrar em contato com os desenvolvedores e ver se há alguma solução.
É sempre possível usar copypastes com hightlight online por aí, como o pessoal do IRC faz. Logo que eu achar uma url disso eu coloco aqui (estou na faculdade, aqui eu não consigo usar o IRC).
about 13 years ago
Pow perl é um código muito estranho, da pra fazer altas coisas ilegiveis =D
about 13 years ago
Cara,
eu está precisando de algo do tipo que vc fez ai nesse seu post muito maneiro. E o seguinte eu precisava que fosse extraido uma relação de nomes de atletas do site da CBF eles disponibilizam todos os dias http://cbfnews.uol.com.br/registro2/ – sendo que eles num tem RSS pra facilitar pra gente – ai comecei a caçar como extrair dados de um site e achei esse seu post. Mais eu nunca usei o phyton. No caso eu copio esse seu código e mudo o endereço da url e salvo com qual extensão, e como faço pra testar?
about 9 years ago
galera
to com um projeto pra entregar amanhâ e não consigo usar este método urllib.open aparece esta mensagem:
teste()
pagina = urllib.urlopen(“http://eupodiatamatando.com/downloads/cursos.html”)
AttributeError: ‘module’ object has no attribute ‘urlopen’
socorro urgente
about 9 years ago
tem algum upgrade pra poder usar esta biblioteca (urllib)?
about 9 years ago
deixa eu explicar melhor, pode ser que dê tempo de alguém ler e me ajudar: sou novo em programação estou no primeiro período de cicia da computação e amanhã tenho que apresentar uma interface gráfica em tkinter que contenha um botão que busca na pagina da caixa econômica federal todos os resultados da mega sena e faça um tratamento destes resultados transformando em uma lista de listas e fazendo algumas estatísticas.
a parte gráfica eu tenho documentação então já esta semi pronta, agora preciso de um código que vá buscar estas informações no site, e mais, preciso saber explicar este código.
help
about 4 years ago
Gostaria apenas de extrair tweets, na íntegra sem remover caracteres especiais, preciso das mensagens para posterior classificação das mesmas. Alguém pode me ajudar?