<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Eu Podia Tá Matando &#187; Python</title>
	<atom:link href="http://eupodiatamatando.com/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://eupodiatamatando.com</link>
	<description>mas tô aqui blogando</description>
	<lastBuildDate>Mon, 14 Nov 2011 14:28:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>SQLite, Resolvendo Problemas Simples com um Banco Simples</title>
		<link>http://eupodiatamatando.com/2007/08/13/sqlite-resolvendo-problemas-simples-com-um-banco-simples/</link>
		<comments>http://eupodiatamatando.com/2007/08/13/sqlite-resolvendo-problemas-simples-com-um-banco-simples/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 14:58:27 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.eupodiatamatando.com/2007/08/13/sqlite-resolvendo-problemas-simples-com-um-banco-simples/</guid>
		<description><![CDATA[Porque levantar um pesado sistema de banco de dados, criar databases, criar tabelas, configurar permissões acessos, configurar usuários, setar portas, rodar daemons só para resolver um problema simples de armazenamento? O SQLite é um banquinho leve e simples para resolver de maneira simples problemas que realmente são simples. Estrutura do SQLite Algumas das vantagens do [...]]]></description>
			<content:encoded><![CDATA[<p>Porque levantar um pesado sistema de banco de dados, criar databases, criar tabelas, configurar permissões acessos, configurar usuários, setar portas, rodar daemons só para resolver um problema simples de armazenamento?</p>
<p>O SQLite é um banquinho leve e simples para resolver de maneira simples problemas que realmente são simples.</p>
<p><span id="more-443"></span></p>
<p style="text-align: center"><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/08/arquitetura_do_sqlite.gif" alt="Diagrama de blocos da arquitetura do sqlite" /><br />
<small>Estrutura do SQLite</small></p>
<p>Algumas das vantagens do SQLite são:</p>
<ul>
<li>Instalação e configuração muito simples.</li>
<li>Implementa boa parte do SQL-92.</li>
<li>Transações ACID &#8211; Atomicidade, Consistência, Isolamento e Durabilidade.</li>
<li>Dados ficam guardados em um único arquivo. Fácil de transportar, fazer backup e manusear.</li>
<li>Suporta base de dados acima de 2 terabytes.</li>
<li>Não depende de outras bibliotecas, é escrito em C puro.</li>
<li>É um software livre e esta disponível sobre domínio público.</li>
</ul>
<p>A instalação dele no Ubuntu ou em outro sistema debian-like é só:</p>
<blockquote><p>sudo apt-get install sqlite</p></blockquote>
<p>Uma vez instalado o SQLite, você pode chamar o prompt do sistema pelo comando sqlite3 (ou somente sqlite, se você instalou uma versão anterior). Chamando o sqlite seguido de um nome de arquivo ele gravará o banco naquele arquivo.</p>
<blockquote><p>$ sqlite teste.db<br />
SQLite version 2.8.17<br />
Enter &#8220;.help&#8221; for instructions<br />
sqlite&gt;</p></blockquote>
<p>Dentro do console você pode usar comandos SQL para criar e manipular as entidades do banco ou usar os comandos que começam com um ponto para acessar comandos do SQLite.</p>
<p>Os comandos que uso mais são:</p>
<ul>
<li><strong>.database</strong> &#8211; lista os bancos e arquivos abertos.</li>
<li><strong>.tables</strong> &#8211; lista as tabelas do banco.</li>
<li><strong>.read coisas.sql -</strong> lê comandos de SQL dentro da arquivo chamado coisas.sql.</li>
<li><strong>.mode column</strong> &#8211; formata a exibição padrão para colunas.</li>
<li><strong>.headers on</strong> &#8211; formata a exibição padrão para exibir os nomes dos campos.</li>
<li><strong>.help </strong>- Ajuda <img src='http://eupodiatamatando.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<h2><strong>Prática 1 &#8211; Agenda de Telefones</strong></h2>
<p>Vamos agora brincar um pouquinho com o SQLite fazendo alguns testes práticos dentro do próprio SQLite.</p>
<p>Vamos passar para o SQLite esse comando de SQL para criarmos uma simples agenda de números telefónicos.</p>
<pre lang="SQL">
CREATE TABLE agenda(
   id INTEGER PRIMARY KEY,
   nome VARCHAR(30),
   tel VARCHAR(20)
);
</pre>
<p>Podemos fazer isso de dentro do SQLite simplesmente digitando linha a linha do comando SQL:</p>
<blockquote><p>$ sqlite telefones.db<br />
SQLite version 2.8.17<br />
Enter &#8220;.help&#8221; for instructions<br />
sqlite> CREATE TABLE agenda(<br />
   &#8230;>    id INTEGER PRIMARY KEY,<br />
   &#8230;>    nome VARCHAR(30),<br />
   &#8230;>    tel VARCHAR(20)<br />
   &#8230;> );<br />
sqlite> </p></blockquote>
<p>Um jeito prático de práticar SQL é guardar os comandos dentro de um arquivo, por exemplo <em>telefones.sql</em>. Depois você entra no SQLite e abre o arquivo com <strong>.read telefones.sql</strong>.</p>
<p>Vamos fazer isso com um comando de SQL maior, que vai destruir qualquer tabela que se chame agenda, criar uma tabela agenda e inserir alguns dados nela.</p>
<pre lang="SQL">
DROP TABLE agenda;
CREATE TABLE agenda(
   id INTEGER PRIMARY KEY,
   nome VARCHAR(30),
   tel VARCHAR(20)
);
INSERT INTO agenda(nome,tel) VALUES ('Central de Transplantes', '0800-8832323');
INSERT INTO agenda(nome,tel) VALUES ('Disque-Silêncio', '3452-6927');
INSERT INTO agenda(nome,tel) VALUES ('Bombeiros', '193');
INSERT INTO agenda(nome,tel) VALUES ('Ambulancia', '192');
INSERT INTO agenda(nome,tel) VALUES ('Policia Militar', '190');
INSERT INTO agenda(nome,tel) VALUES ('Defesa Civil', '199');
INSERT INTO agenda(nome,tel) VALUES ('Disque-Cidade Limpa','0800-851531');
</pre>
<p><small><strong>obs1:</strong> Não precisamos inserir os dados de id porque eles são chaves primárias e vão se preencher sozinhos, sempre cuidando para que duas chaves nunca sejam iguais. <strong>obs2:</strong> Esse números são referentes ao Ceará. Para maiores informações consulte a <a href="http://www.telelistas.net/templates/telefones_uteis.aspx">Telelistas</a>.</small></p>
<p>Depois abrimos o arquivo pelo SQLite e já podemos fazer algumas consultas:</p>
<blockquote><p>$ sqlite telefones.db<br />
SQLite version 2.8.17<br />
Enter &#8220;.help&#8221; for instructions<br />
sqlite> .read telefones.sql<br />
sqlite> SELECT * FROM agenda;<br />
1|Central de Transplantes|0800-8832323<br />
2|Disque-Silêncio|3452-6927<br />
3|Bombeiros|193<br />
4|Ambulancia|192<br />
5|Policia Militar|190<br />
6|Defesa Civil|199<br />
7|Disque-Cidade Limpa|0800-851531
</p></blockquote>
<p>Para selecionar somente alguns campos da tabela faça:</p>
<blockquote><p>sqlite> SELECT nome, tel FROM agenda;<br />
Central de Transplantes|0800-8832323<br />
Disque-Silencio|3452-6927<br />
Bombeiros|193<br />
Ambulancia|192<br />
Policia Militar|190<br />
Defesa Civil|199<br />
Disque-Cidade Limpa|0800-851531</p></blockquote>
<p>Selecionar somente alguns campos da tabela e ordenar a saida pelo nome, faça:</p>
<blockquote><p>sqlite> SELECT nome,tel FROM agenda ORDER BY nome;<br />
Ambulancia|192<br />
Bombeiros|193<br />
Central de Transplantes|0800-8832323<br />
Defesa Civil|199<br />
Disque-Cidade Limpa|0800-851531<br />
Disque-Silêncio|3452-6927<br />
Policia Militar|190
</p></blockquote>
<p>Descobrir de quem eh o telefone 0800-8832323:</p>
<blockquote><p>sqlite> SELECT nome FROM agenda WHERE tel == &#8217;0800-8832323&#8242;;<br />
Central de Transplantes</p></blockquote>
<p>Descobrir que nomes sao da forma disque-alguma-coisa:</p>
<blockquote><p>sqlite> SELECT nome FROM agenda WHERE nome LIKE &#8216;disque%&#8217;;<br />
Disque-Silêncio<br />
Disque-Cidade Limpa
</p></blockquote>
<p>Retirando da tabela agenda o nome e telefone do Disque-Silêncio. Depois vamos dar uma select para ver a agenda e verificar que essa entrada nao esta mais la.</p>
<blockquote><p>sqlite> DELETE FROM agenda WHERE nome == &#8216;Disque-Silêncio&#8217;;<br />
sqlite> select * from agenda;<br />
1|Central de Transplantes|0800-8832323<br />
3|Bombeiros|193<br />
4|Ambulancia|192<br />
5|Policia Militar|190<br />
6|Defesa Civil|199<br />
7|Disque-Cidade Limpa|0800-851531</p></blockquote>
<h2><strong>Prática 2 &#8211; Fórum</strong></h2>
<p>Nesse exemplo vamos ver os TRIGGERS.</p>
<p style="text-align: center">
<img src='http://www.eupodiatamatando.com/wp-content/uploads/2007/08/hora_do_lanche.jpg' alt='Tigres comendo coelhos' /><br />
<small>Eu disse Triggers e não tigers!</small></p>
<p>Trigger quer dizer gatilho. Com triggers você configura ações a serem tomadas quando certos eventos com ocorrem. Eventos que disparam uma trigger podem ser uma inserção, deleção ou atualização de alguma tabela.</p>
<p>Vamos criar uma tabela simples para guardar comentários no estilo de threads em fóruns.</p>
<pre lang="SQL">
DROP TABLE thread;
CREATE TABLE thread(
	id INTEGER PRIMARY KEY,
	pai INTEGER,
	apelido VARCHAR(20),
	texto TEXT,
	respostas INTEGER
);
</pre>
<p>O campo pai vai referenciar qual thread esta thread está referenciando. Vamos convencionar que um pai igual a zero corresponde a uma thread raiz. O campo respostas contara quantas outras threads apontam para esta thread como pai somado com o numero de respostas desses filhos. Vamos convencionar que toda thread começa com o campo respostas igual a zero.</p>
<p>Vamos criar dois triggers. O trigger comentario_novo vai ser disparado quando alguém adicionar uma novo comentario, ele vai procurar o pai daquela thread e adicionar o número de respostas. Mas só isso não basta. O trigger comentario_alterado vai ser disparado quando alguém mexer na campo respostas de uma thread, ele vai procurar o pai daquela thread e adicionar seu número de respostas.</p>
<pre lang="SQL">
CREATE TRIGGER comentario_novo AFTER INSERT ON thread
BEGIN
   UPDATE thread SET respostas = respostas + 1 WHERE id = new.pai;
END;

CREATE TRIGGER comentario_alterado AFTER UPDATE OF respostas ON thread
BEGIN
   UPDATE thread SET respostas = respostas + 1 WHERE id = new.pai;
END;
</pre>
<p><small><strong>obs:</strong> Esse exemplo não cobre todas as possibilidades. Para manter o problema mais simples estou convencionando que não se pode deletar uma thread ou mudar o pai de uma thread.</small></p>
<p>Veja só o que acontece quando colocamos alguns comentários no banco:</p>
<pre LANG="SQL">
INSERT INTO thread(pai, apelido, texto, respostas) VALUES (0, "Jose", "Oi. Alguem conheçe algum site legal?", 0);
INSERT INTO thread(pai, apelido, texto, respostas) VALUES (1, "Maria", "Tem o eupodiatamatando.com <img src='http://eupodiatamatando.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ", 0);
INSERT INTO thread(pai, apelido, texto, respostas) VALUES (2, "Jose", "Valeu Maria!", 0);
INSERT INTO thread(pai, apelido, texto, respostas) VALUES (1, "Pedro", "Eu gosto do br-linux.org", 0);
</pre>
<blockquote><p>sqlite> SELECT * FROM THREAD;<br />
1|0|Jose|Oi. Alguem conheçe algum site legal?|3<br />
2|1|Maria|Tem o eupodiatamatando.com <img src='http://eupodiatamatando.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> |1<br />
3|2|Jose|Valeu Maria!|0<br />
4|1|Pedro|Eu gosto do br-linux.org|0</p></blockquote>
<p>Voilá! Houve um efeito em cascata. Quando disparamos um trigger comentario_novo ele vai modificar uma thread e vai disparar um trigger comentario_alterado, que por sua vez vai disparar outro comentario_alterado até chegar na thread raíz.</p>
<p>Trigger são legais para se colocar alguma lógica dentro do banco e fora do código da aplicação principal. A divisão da lógica entre sua aplicação e o banco vai depender da facilidade de se implementar algo com SQL ou com seu código-fonte e de bom senso.</p>
<h2><strong>Prática 3 &#8211; Misture tudo e coloque Python!</strong></h2>
<p>Python não podia ficar de fora disso tudo <img src='http://eupodiatamatando.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Para instalar o que você precisa:</p>
<blockquote><p># apt-get install python-sqlite</p></blockquote>
<p>Esse é um programa para abrir nossa agenda de telefones do primeiro exemplo:</p>
<pre lang="PYTHON">
#!/usr/bin/env python
import sqlite

conexao = sqlite.connect('telefones.db')
cursor = conexao.cursor()
cursor.execute('SELECT * FROM agenda;')
for i in cursor:
   print i[1], i[2]
</pre>
<p>Em cada iteração de i ele vai ser uma tripla com os campos da sua tabela. Mandamos imprimir os campos 1 e 2 que são o nome e telefone.</p>
<p>Isso vai imprimir isso na tela:</p>
<blockquote><p>
Central de Transplantes 0800-8832323<br />
Disque-Silêncio 3452-6927<br />
Bombeiros 193<br />
Ambulancia 192<br />
Policia Militar 190<br />
Defesa Civil 199<br />
Disque-Cidade Limpa 0800-851531
</p></blockquote>
<p>Vale a pena dar uma chance pro <a href="http://www.sqlite.org">SQLite</a>. <img src='http://eupodiatamatando.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/05/dices.jpg" alt="Dados" align="left" /><br />
Dê uma olhada nos preços de <a href="http://compare.buscape.com.br/proc_unico?id=3482&amp;kw=sql&amp;site_origem=1195335" title="Baratinho">livros sobre SQL</a> ou <a href="http://compare.buscape.com.br/proc_unico?id=3482&amp;kw=banco+de+dados&amp;site_origem=1195335" title="Baratinho você acha">livros sobre banco de dados</a>. Buscapé.</p>
<h3>Posts relacionados</h3>
<ul class="related_post">
<li><a href="http://eupodiatamatando.com/2007/05/26/persistencia-em-python-criando-um-agenda-simples/" title="Persistência em Python, criando uma agenda simples">Persistência em Python, criando uma agenda simples (18)</a></li>
<li><a href="http://eupodiatamatando.com/2007/07/28/python-para-extrair-informacoes/" title="Python para extrair informações">Python para extrair informações (14)</a></li>
<li><a href="http://eupodiatamatando.com/2007/05/05/pil-python-imaging-library/" title="PIL: Python Imaging Library">PIL: Python Imaging Library (0)</a></li>
<li><a href="http://eupodiatamatando.com/2007/04/09/sobrecarga-de-operadores-em-python/" title="Sobrecarga de operadores em Python">Sobrecarga de operadores em Python (13)</a></li>
<li><a href="http://eupodiatamatando.com/2007/03/11/preenchendo-com-zeros-a-esquerda/" title="Preenchendo com zeros à esquerda">Preenchendo com zeros à esquerda (1)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eupodiatamatando.com/2007/08/13/sqlite-resolvendo-problemas-simples-com-um-banco-simples/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Programa para imprimir ele mesmo</title>
		<link>http://eupodiatamatando.com/2007/07/30/programa-para-imprimir-ele-mesmo/</link>
		<comments>http://eupodiatamatando.com/2007/07/30/programa-para-imprimir-ele-mesmo/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 14:19:45 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.eupodiatamatando.com/2007/07/30/programa-para-imprimir-ele-mesmo/</guid>
		<description><![CDATA[Aqui uma tarefa de programação interessante. Escrever o código que imprime ele mesmo. Em Python é isso: import sys me = open(sys.argv[0]) for line in me: print line, me.close() Em Shell Script por Xisberto: cat $0 Em PHP por Paulo André: $file = “teste.php”; $fcontent = file_get_contents($file); highlight_string($fcontent, false); obs: O que eu quero não [...]]]></description>
			<content:encoded><![CDATA[<p>Aqui uma tarefa de programação interessante.<br />
Escrever o código que imprime ele mesmo.</p>
<p><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/07/python_no_espelho.jpg" alt="Python no espelho. Python in a mirror." /></p>
<p>Em Python é isso:</p>
<pre lang="PYTHON">
import sys
me = open(sys.argv[0])
for line in me:
   print line,
me.close()
</pre>
<p>Em Shell Script por <a href="http://xisberto.blogspot.com/">Xisberto</a>:</p>
<pre lang="SHELL">
cat $0
</pre>
<p>Em PHP por Paulo André:</p>
<pre lang="PHP">
$file = “teste.php”;
$fcontent = file_get_contents($file);
highlight_string($fcontent, false);
</pre>
<p><small><strong>obs</strong>: O que eu quero não é o problema de <a href="http://en.wikipedia.org/wiki/Quine_(computing)">Quine</a>, mas sim um programa que abra seu código-fonte e o imprima. Eu uso isso para páginas feitas em Python onde eu quero que o usuário possa ver o código-fonte da aplicação facilmente.</small></p>
<p>Se você fizer em outra linguagem e colocar nos comentários, eu o coloco dentro desse post.</p>
<p><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/07/espelho_oval1.jpg" alt="Espelho oval" align="left" />Aproveite e <a href="http://compare.buscape.com.br/categoria?lkout=1&amp;id=3443&amp;kw=espelho&amp;site_origem=1195335" title="Preços de espelho">dê uma olhada nos melhores preços de espelhos para sua casa</a>.</p>
<p>Buscapé.<br />
<h3>Posts relacionados</h3>
<ul class="related_post">
<li><a href="http://eupodiatamatando.com/2007/08/13/sqlite-resolvendo-problemas-simples-com-um-banco-simples/" title="SQLite, Resolvendo Problemas Simples com um Banco Simples">SQLite, Resolvendo Problemas Simples com um Banco Simples (12)</a></li>
<li><a href="http://eupodiatamatando.com/2007/07/28/python-para-extrair-informacoes/" title="Python para extrair informações">Python para extrair informações (14)</a></li>
<li><a href="http://eupodiatamatando.com/2007/06/14/a-folha-de-pesca-do-django/" title="A folha de pesca do Django">A folha de pesca do Django (0)</a></li>
<li><a href="http://eupodiatamatando.com/2007/05/26/persistencia-em-python-criando-um-agenda-simples/" title="Persistência em Python, criando uma agenda simples">Persistência em Python, criando uma agenda simples (18)</a></li>
<li><a href="http://eupodiatamatando.com/2007/05/23/livro-python-guia-de-bolso/" title="Livro Python Guia de Bolso">Livro Python Guia de Bolso (14)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eupodiatamatando.com/2007/07/30/programa-para-imprimir-ele-mesmo/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Python para extrair informações</title>
		<link>http://eupodiatamatando.com/2007/07/28/python-para-extrair-informacoes/</link>
		<comments>http://eupodiatamatando.com/2007/07/28/python-para-extrair-informacoes/#comments</comments>
		<pubDate>Sat, 28 Jul 2007 15:00:26 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.eupodiatamatando.com/2007/07/28/python-para-extrair-informacoes/</guid>
		<description><![CDATA[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: [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/07/python_work.jpg" alt="Python agarra homem" align="right" />Python me tem sido muito útil no dia-a-dia para <a href="http://pt.wikipedia.org/wiki/Recupera%C3%A7%C3%A3o_de_informa%C3%A7%C3%A3o" title="Recuperação de dados">recuperar</a> grandes quantidades de dados codificadas dentro de sites.</p>
<p>Por exemplo, eu precisava de todos os nomes de cursos de pós graduação da <a href="http://www.ufc.br" title="Universidade Federal do Ceará">UFC</a> para depois jogar em uns formulário do <a href="http://www.joomla.org" title="Joomla">Joomla</a>. Esses dados podem ser conseguidos <a href="http://servicos.capes.gov.br/projetorelacaocursos/jsp/cursoIesDet.jsp?cd_ies=22001018" title="Capes">neste site da Capes</a>.</p>
<p>Lá os dados estavam assim:</p>
<p style="text-align: center"><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/07/cursos_ufc_na_capes.jpg" alt="Cursos da UFC dentro do site da CAPES" /></p>
<p>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.</p>
<p>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.</p>
<p>Então, transformamos esse trabalho chato e repetitivo em algo que o Python pode fazer pra você:</p>
<pre line="1" lang="PYTHON">
import urllib
pagina = urllib.urlopen("http://eupodiatamatando.com/downloads/cursos.html")
for linha in pagina:
   if linha.find("cd_programa") != -1:
      tmp = linha.split('&gt;', 1)[1]
      nome = tmp.split('&lt; ', 1)[0]
      print nome
pagina.close()</pre>
<p>A saída desse programa é algo assim:</p>
<blockquote><p> ADMINISTRAÇÃO DE EMPRESAS<br />
AGRONOMIA (FITOTECNIA)<br />
AGRONOMIA (IRRIGAÇÃO E DRENAGEM)<br />
AGRONOMIA (SOLOS E NUTRIÇÃO DE PLANTAS)<br />
AVALIAÇÃO DE POLÍTICAS PÚBLICAS<br />
BIOQUÍMICA<br />
CIÊNCIAS DA COMPUTAÇÃO<br />
&#8230;</p></blockquote>
<p>Da biblioteca urllib nós usamos o urlopen, que puxou a página e guardou num manipulador chamado <em>pagina</em>, como ele implementa o método next, nós podemos iterar sobre ele usando um simples <em>for</em>. Passamos por todas as linhas e sé há a string &#8220;cd_programa&#8221; 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.</p>
<p>O método split, que fatia a string, <a href="http://www.eupodiatamatando.com/2007/03/05/split-comando-python-para-dividir-strings/">já foi discutido aqui antes</a>.</p>
<p>Você deve estar se perguntando, &#8220;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?&#8221;. 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.</p>
<p>Por exemplo, se você quiser saber quais são as notícias que estão em cartaz no Br-linux agora:</p>
<pre lang="PYTHON">
import urllib
pagina = urllib.urlopen("http://br-linux.org")
for linha in pagina:
	if linha.find("node-title") != -1:
		tmp = linha.split('&gt;',2)[2]
		nome = tmp.split('&lt; ',1)[0]
		print nome
pagina.close()</pre>
<p>Isso retorna algo assim:</p>
<blockquote><p>Carregando seus feeds no bolso<br />
Personalize seu teclado com o X e o KDE<br />
Linux na cultura pop: GRUB nos quadrinhos da Marvel<br />
iPod no Linux &#8211; guia ilustrado de uso com o Amarok<br />
Feliz dia do Administrador de Sistemas!<br />
&#8230;</p></blockquote>
<p>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.</p>
<p><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/03/livros_python.jpg" alt="Livros Python" align="left" /> Promoção! <a href="http://compare.buscape.com.br/proc_unico?id=3482&amp;kw=python&amp;site_origem=1195335" title="Baratinho você acha">Livros de Como Programar em Python</a>  pelos menores preços você encontra no Buscapé.<br />
<h3>Posts relacionados</h3>
<ul class="related_post">
<li><a href="http://eupodiatamatando.com/2007/08/13/sqlite-resolvendo-problemas-simples-com-um-banco-simples/" title="SQLite, Resolvendo Problemas Simples com um Banco Simples">SQLite, Resolvendo Problemas Simples com um Banco Simples (12)</a></li>
<li><a href="http://eupodiatamatando.com/2007/05/26/persistencia-em-python-criando-um-agenda-simples/" title="Persistência em Python, criando uma agenda simples">Persistência em Python, criando uma agenda simples (18)</a></li>
<li><a href="http://eupodiatamatando.com/2007/03/11/preenchendo-com-zeros-a-esquerda/" title="Preenchendo com zeros à esquerda">Preenchendo com zeros à esquerda (1)</a></li>
<li><a href="http://eupodiatamatando.com/2007/07/30/programa-para-imprimir-ele-mesmo/" title="Programa para imprimir ele mesmo">Programa para imprimir ele mesmo (8)</a></li>
<li><a href="http://eupodiatamatando.com/2007/07/22/java-vs-ruby/" title="Java vs Ruby?">Java vs Ruby? (10)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eupodiatamatando.com/2007/07/28/python-para-extrair-informacoes/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>A folha de pesca do Django</title>
		<link>http://eupodiatamatando.com/2007/06/14/a-folha-de-pesca-do-django/</link>
		<comments>http://eupodiatamatando.com/2007/06/14/a-folha-de-pesca-do-django/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 09:00:12 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.eupodiatamatando.com/2007/06/14/a-folha-de-pesca-do-django/</guid>
		<description><![CDATA[O pessoal da mercurytide.com fez essa folha-resumo para Django. Está disponível em PDF ou em PNG de alta resolução. Dê uma olhada. Você imprime isso numa folha A4 e você tem em mãos um pequeno guia para referência rápida dos modelos, tags e filtros do Django.  Django é um framework para desenvolvimento rápido de aplicações [...]]]></description>
			<content:encoded><![CDATA[<p>O pessoal da <a href="http://www.mercurytide.com">mercurytide.com</a> fez essa folha-resumo para <a href="http://www.djangoproject.org" title="Django oficial site">Django</a>.</p>
<p style="text-align: center"><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/06/django_folha.jpg" alt="Folha de pesca do django django sheet django cheat django shortcuts django atalhos" /></p>
<p>Está disponível em <a href="http://www.mercurytide.com/media/whitepapers/django-cheat-sheet/django095-cheat-sheet.pdf" title="Download em PDF">PDF</a> ou em <a href="http://www.mercurytide.com/media/whitepapers/django-cheat-sheet/django095-cheat-sheet.png" title="Download em PNG">PNG</a> de alta resolução. Dê <a href="http://www.mercurytide.com/whitepapers/django-cheat-sheet/" title="Django Cheat Sheet">uma olhada</a>.</p>
<p><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/06/django-love.jpg" alt="I love django" align="left" />Você imprime isso numa folha A4 e você tem em mãos um pequeno guia para referência rápida dos modelos, tags e filtros do Django.</p>
<p><a href="http://en.wikipedia.org/wiki/Django_%28web_framework%29" title="Wikipédia, em inglês"> Django</a> é um framework para desenvolvimento rápido de aplicações web. É um framework que está crescendo e sendo muito adotado. Eu estou utilizando ele para um projeto da faculdade.</p>
<p><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/03/livros_python.jpg" alt="Livros Python" align="left" /> Comece agora! Dê uma olhada nos <a href="http://compare.buscape.com.br/proc_unico?id=3482&amp;kw=python&amp;site_origem=1195335" title="Baratinho você acha">livros de programação em Python</a>  pelos menores preços. Buscapé.<br />
<h3>Posts relacionados</h3>
<ul class="related_post">
<li><a href="http://eupodiatamatando.com/2007/08/13/sqlite-resolvendo-problemas-simples-com-um-banco-simples/" title="SQLite, Resolvendo Problemas Simples com um Banco Simples">SQLite, Resolvendo Problemas Simples com um Banco Simples (12)</a></li>
<li><a href="http://eupodiatamatando.com/2007/07/30/programa-para-imprimir-ele-mesmo/" title="Programa para imprimir ele mesmo">Programa para imprimir ele mesmo (8)</a></li>
<li><a href="http://eupodiatamatando.com/2007/07/28/python-para-extrair-informacoes/" title="Python para extrair informações">Python para extrair informações (14)</a></li>
<li><a href="http://eupodiatamatando.com/2007/05/26/persistencia-em-python-criando-um-agenda-simples/" title="Persistência em Python, criando uma agenda simples">Persistência em Python, criando uma agenda simples (18)</a></li>
<li><a href="http://eupodiatamatando.com/2007/05/23/livro-python-guia-de-bolso/" title="Livro Python Guia de Bolso">Livro Python Guia de Bolso (14)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eupodiatamatando.com/2007/06/14/a-folha-de-pesca-do-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Urru! Saí no Daily Python URL</title>
		<link>http://eupodiatamatando.com/2007/05/30/urru-sai-no-daily-python-url/</link>
		<comments>http://eupodiatamatando.com/2007/05/30/urru-sai-no-daily-python-url/#comments</comments>
		<pubDate>Thu, 31 May 2007 00:49:44 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.eupodiatamatando.com/2007/05/30/urru-sai-no-daily-python-url/</guid>
		<description><![CDATA[ps: A tirinha acima não tem nada a ver com a notícia e não é minha. O Daily Python URL é um site que traz diariamente um site com algum conteúdo relacionado à Python. O artigo sobre Python Image Library, mesmo em português, que já havia saído no BR-Linux, agora foi um dos escolhidos como [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.eupodiatamatando.com/wp-content/uploads/2007/05/doctor_fun.jpg" alt="Doctor Fun, so who is guido van Rossum" /><br />
<small>ps: A tirinha acima não tem nada a ver com a notícia e não é minha.</small></p>
<p>O <a href="http://www.pythonware.com/daily/" title="Python Daily URL">Daily Python URL</a> é um site que traz diariamente um site com algum conteúdo relacionado à Python.</p>
<p>O artigo sobre <a href="http://www.eupodiatamatando.com/estudos/python-imaging-library/" title="Python Image Library PIL">Python Image Library</a>, mesmo em português, que já havia saído no <a href="http://www.google.com.br/url?sa=t&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fbr-linux.org%2Flinux%2Fpil-equivalente-python-para-a-gd&amp;ei=DhteRoCgM4n0wQLy2vytBQ&amp;usg=AFrqEzet92Br80IUzqmJshqsRJkxigmV4A&amp;sig2=deGnJYlyRNLJp9mEGTBQIQ" title="Br-linux">BR-Linux</a>, agora foi um dos escolhidos como URL do dia <a href="http://www.pythonware.com/daily/#entry3896564353085189974" title="Daily Python URL">30-05-2007</a>.</p>
<p>É um incentivo a mais para que eu comece a escrever e traduzir alguns posts bons, para inglês.<br />
<h3>Posts relacionados</h3>
<ul class="related_post">
<li><a href="http://eupodiatamatando.com/2007/08/13/sqlite-resolvendo-problemas-simples-com-um-banco-simples/" title="SQLite, Resolvendo Problemas Simples com um Banco Simples">SQLite, Resolvendo Problemas Simples com um Banco Simples (12)</a></li>
<li><a href="http://eupodiatamatando.com/2007/07/28/python-para-extrair-informacoes/" title="Python para extrair informações">Python para extrair informações (14)</a></li>
<li><a href="http://eupodiatamatando.com/2007/05/26/persistencia-em-python-criando-um-agenda-simples/" title="Persistência em Python, criando uma agenda simples">Persistência em Python, criando uma agenda simples (18)</a></li>
<li><a href="http://eupodiatamatando.com/2007/03/11/preenchendo-com-zeros-a-esquerda/" title="Preenchendo com zeros à esquerda">Preenchendo com zeros à esquerda (1)</a></li>
<li><a href="http://eupodiatamatando.com/2007/08/21/como-saber-se-seu-amigo-e-um-robo/" title="Como Saber se seu Amigo é um Robô">Como Saber se seu Amigo é um Robô (19)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eupodiatamatando.com/2007/05/30/urru-sai-no-daily-python-url/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.748 seconds -->

