SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
WebCrawlers com Python e Regex	

                 Marcel Pinheiro Caraciolo	

                  Python	
  Aula	
  Extra	
  
1
 
	
  
               O que são webcrawlers ?	

WebCrawlers	
  são	
  programas	
  de	
  computador	
  que	
  percorrem	
  a	
  
internet	
  de	
  forma	
  automa>zada	
  e	
  metódica.	
  	
  Também	
  chamados	
  
de	
  bots	
  ou	
  spiders,	
  são	
  muito	
  u>lizados	
  em	
  sites	
  de	
  busca	
  como	
  
Google	
  para	
  indexar	
  as	
  páginas	
  web	
  em	
  sua	
  base	
  de	
  dados.	
  




                                      Arquitetura	
  de	
  um	
  WebCrawler	
  


                                      Python	
  Aula	
  Extra	
  
 2
O que são expressões regulares ?	


Chamado	
  também	
  de	
  regex	
  ou	
  regexp	
  

Ferramenta	
  eficiente	
  para	
  processamento	
  de	
  palavras	
  em	
  texto	
  
por	
  meio	
  de	
  casamento	
  de	
  padrões	
  

Linguagem	
  formal	
  que	
  pode	
  ser	
  interpretada	
  por	
  um	
  
processador	
  de	
  expressões	
  regulares	
  ou	
  por	
  um	
  programa	
  que	
  
iden>fica	
  partes	
  do	
  texto	
  que	
  “casam”	
  com	
  uma	
  especificação	
  
provida.	
  -­‐	
  Wikipedia	
  



                                  Python	
  Aula	
  Extra	
  
3
O que são expressões regulares ?	

Também	
  podemos	
  afirmar	
  que	
  é:	
  
	
  
•  Uma	
  maneira	
  de	
  procurar	
  um	
  texto	
  que	
  você	
  não	
  
     lembra	
  exatamente	
  como	
  é,	
  mas	
  tem	
  ideia	
  das	
  
     variações	
  possíveis;	
  	
  
•  Uma	
  maneira	
  de	
  procurar	
  um	
  trecho	
  em	
  posições	
  
     específicas	
  como	
  no	
  começo	
  ou	
  no	
  fim	
  de	
  uma	
  linha,	
  
     ou	
  palavra;	
  	
  
•  Uma	
  maneira	
  de	
  um	
  programador	
  especificar	
  
     padrões	
  complexos	
  que	
  podem	
  ser	
  procurados	
  e	
  
     casados	
  em	
  uma	
  cadeia	
  de	
  caracteres;	
  	
  
                                 Python	
  Aula	
  Extra	
  
4
Expressões Regulares	


Representação formal de um autômato finito, com o objetivo de
determinar um padrão de texto.




                                                  ^[0-9]+. [0-9]*|. [0-9]+$
                     Leitura atômica da esquerda para a direita




                           Python	
  Aula	
  Extra	
  
5
Onde são aplicados ?	

Busca	
  ou	
  validação	
  de	
  um	
  padrão	
  de	
  texto	
  que	
  pode	
  ser	
  
variável	
  como	
  datas,	
  horários,	
  números	
  IP,	
  endereços,	
  dados	
  
de	
  uma	
  coluna	
  N	
  de	
  texto,	
  dados	
  que	
  estão	
  entre	
  tags,	
  RG,	
  CPF,	
  
cartão	
  de	
  crédito,	
  etc.	
  
                                                                                                             Como	
  achar	
  apenas	
  os	
  usuários	
  que	
  
                	
  	
  	
  	
  	
  	
  	
  	
  	
  05:15	
  	
  ernesto	
                                   acessaram	
  o	
  sistema	
  
                                               	
  08:39	
  	
  ricardo	
                                    No	
  período	
  da	
  tarde	
  (meio-­‐dia	
  às	
  6)	
  ?	
  
                                               	
  10:32	
  	
  patricia	
  
                                               	
  14:59	
  	
  gabriel	
  
                                                                                                                                Resposta:	
  ^1[2-­‐8]	
  
                                               	
  16:27	
  	
  carla	
  
                                               	
  22:23	
  	
  marcelo	
  




                                                                               Python	
  Aula	
  Extra	
  
 6
Construindo um Crawler - Correios	

Os	
  Correios	
  brasileiro	
  possui	
  um	
  website	
  que	
  provê	
  o	
  
rastreamento	
  de	
  encomendas	
  via	
  sedex,	
  carta	
  registrada,	
  pac,	
  etc.	
  
	
  
Este	
  site	
  é	
  gratuito	
  e	
  informa	
  o	
  status	
  atual	
  da	
  encomenda,	
  isto	
  é,	
  
se	
  já	
  foi	
  entregue,	
  se	
  já	
  foi	
  enviado	
  e	
  por	
  qual	
  localidade	
  ou	
  
agência	
  se	
  encontra.	
  




                                        Python	
  Aula	
  Extra	
  
  7
Nesta aula aprenderemos	



Como	
  podemos	
  construir	
  um	
  simples	
  webcrawler	
  usando	
  
expressões	
  regulares	
  para	
  rastreamento	
  de	
  encomendas	
  usando	
  
Python.	
  
	
  




                                Python	
  Aula	
  Extra	
  
  8
Disclaimer!!	

Esta	
  aula	
  tem	
  como	
  obje>vo	
  apenas	
  
fins	
  didá>cos	
  a	
  construção	
  deste	
  crawler;	
  
	
  
De	
   hipotése	
   alguma	
   incen>vamos	
   o	
   uso	
  
indevido	
  ou	
  PAGO	
  desta	
  ferramenta.	
  Os	
  dados	
  
são	
  públicos!!!	
  
	
  
N ã o	
   n o s	
   r e s p o n s a b i l i z a m o s	
   p e l o	
   u s o	
  
inapropriado	
   deste	
   crawler.	
   	
   Recomendo	
  
inclusive	
   u>lizar	
   as	
   ferramentas	
   fornecidas	
   pelo	
  
site	
  oficial	
  dos	
  correios	
  brasileiros;	
  
	
  
	
  
	
  
                                                     Python	
  Aula	
  Extra	
  
     9
Construindo o Downloader	

O	
  Primeiro	
  passo	
  é	
  construir	
  o	
  mecanismo	
  de	
  fazer	
  o	
  download	
  do	
  
resultado	
  dos	
  correios	
  após	
  a	
  consulta	
  do	
  código	
  de	
  rastreamento	
  
como	
  parâmetro.	
  
	
                    	
  
                       	
  




                                hmps://gist.github.com/2866283	
  


                                      Python	
  Aula	
  Extra	
  
  10
Construindo o Downloader	

Adicionando	
  a	
  extração	
  do	
  html	
  por	
  meio	
  do	
  módulo	
  urllib	
  em	
  
python.	
  
                       	
  
                       	
  




                              hmps://gist.github.com/2866483	
  
                                      Python	
  Aula	
  Extra	
  
  11
Construindo o Downloader	

Resultado	
  da	
  primeira	
  etapa:	
  
          <table	
  	
  border	
  cellpadding=1	
  hspace=10>	
  
          <colgroup	
  style='font:8pt	
  Tahoma;color=Black'	
  valign=top><colgroup	
  style='font:8pt	
  Tahoma;	
  color=Navy'><colgroup	
  style='font:8pt	
  Tahoma;color=Maroon'>	
  
          	
  
          <tr>	
  
          <td><font	
  FACE=Tahoma	
  color='#CC0000'	
  size=2><b>Data</b></font></td>	
  
          <td><font	
  FACE=Tahoma	
  c	
  olor='#CC0000'	
  size=2><b>Local</b></font></td>	
  
          <td><font	
  FACE=Tahoma	
  c	
  olor='#CC0000'	
  size=2><b>Situa??o</b></font></td>	
  
          </tr>	
  
          <tr><td	
  rowspan=1>25/04/2012	
  17:36</td><td>CDD	
  CACOAL	
  -­‐	
  CACOAL/RO</td><td><FONT	
  COLOR="5F9F9F">Entrega	
  Efetuada</font></td></tr>	
  
          <tr><td	
  rowspan=1>25/04/2012	
  09:04</td><td>CDD	
  CACOAL	
  -­‐	
  CACOAL/RO</td><td><FONT	
  COLOR="007FFF">Saiu	
  para	
  entrega</font></td></tr>	
  
          <tr><td	
  rowspan=2>23/04/2012	
  12:46</td><td>CTCE	
  PORTO	
  VELHO	
  -­‐	
  PORTO	
  VELHO/RO</td><td><FONT	
  COLOR="000000">Encaminhado</font></td></tr>	
  
          <tr><td	
  colspan=2>Em	
  tr?nsito	
  para	
  CDD	
  CACOAL	
  -­‐	
  CACOAL/RO</td></tr>	
  
          <tr><td	
  rowspan=2>19/04/2012	
  14:55</td><td>CTE	
  SAUDE	
  -­‐	
  SAO	
  PAULO/SP</td><td><FONT	
  COLOR="000000">Encaminhado</font></td></tr>	
  
          <tr><td	
  colspan=2>Encaminhado	
  para	
  CTCE	
  PORTO	
  VELHO	
  -­‐	
  PORTO	
  VELHO/RO</td></tr>	
  
          <tr><td	
  rowspan=1>18/04/2012	
  21:38</td><td>CTE	
  SAUDE/GCCAP	
  -­‐	
  SAO	
  PAULO/SP</td><td><FONT	
  COLOR="000000">Postado</font></td></tr>	
  
          <tr><td	
  rowspan=2>18/04/2012	
  19:11</td><td>CEE	
  MOEMA	
  -­‐	
  SAO	
  PAULO/SP</td><td><FONT	
  COLOR="000000">Encaminhado</font></td></tr>	
  
          <tr><td	
  colspan=2>Em	
  tr?nsito	
  para	
  CTE	
  SAUDE	
  -­‐	
  SAO	
  PAULO/SP</td></tr>	
  
          </TABLE>	
  




                                                                      Python	
  Aula	
  Extra	
  
  12
Construindo o Downloader	

O	
  Módulo	
  re	
  permite	
  a	
  construção	
  de	
  expressões	
  regulares.	
  O	
  
nosso	
  obje>vo	
  é	
  extrair	
  a	
  tabela	
  com	
  os	
  status	
  das	
  encomendas.	
  
                       	
  
                       	
  


                                                                Retorna	
  tudo	
  entre	
  as	
  tags	
  
                                                                    <table>	
  </TABLE>	
  




                              hmps://gist.github.com/2872334	
  
                                      Python	
  Aula	
  Extra	
  
  13
Construindo o Downloader	

Resultado	
  da	
  segunda	
  etapa:	
  
          <table	
  	
  border	
  cellpadding=1	
  hspace=10>	
  
          <colgroup	
  style='font:8pt	
  Tahoma;color=Black'	
  valign=top><colgroup	
  style='font:8pt	
  Tahoma;	
  color=Navy'><colgroup	
  style='font:8pt	
  Tahoma;color=Maroon'>	
  
          	
  
          <tr>	
  
          <td><font	
  FACE=Tahoma	
  color='#CC0000'	
  size=2><b>Data</b></font></td>	
  
          <td><font	
  FACE=Tahoma	
  c	
  olor='#CC0000'	
  size=2><b>Local</b></font></td>	
  
          <td><font	
  FACE=Tahoma	
  c	
  olor='#CC0000'	
  size=2><b>Situa??o</b></font></td>	
  
          </tr>	
  
          <tr><td	
  rowspan=1>25/04/2012	
  17:36</td><td>CDD	
  CACOAL	
  -­‐	
  CACOAL/RO</td><td><FONT	
  COLOR="5F9F9F">Entrega	
  Efetuada</font></td></tr>	
  
          <tr><td	
  rowspan=1>25/04/2012	
  09:04</td><td>CDD	
  CACOAL	
  -­‐	
  CACOAL/RO</td><td><FONT	
  COLOR="007FFF">Saiu	
  para	
  entrega</font></td></tr>	
  
          <tr><td	
  rowspan=2>23/04/2012	
  12:46</td><td>CTCE	
  PORTO	
  VELHO	
  -­‐	
  PORTO	
  VELHO/RO</td><td><FONT	
  COLOR="000000">Encaminhado</font></td></tr>	
  
          <tr><td	
  colspan=2>Em	
  tr?nsito	
  para	
  CDD	
  CACOAL	
  -­‐	
  CACOAL/RO</td></tr>	
  
          <tr><td	
  rowspan=2>19/04/2012	
  14:55</td><td>CTE	
  SAUDE	
  -­‐	
  SAO	
  PAULO/SP</td><td><FONT	
  COLOR="000000">Encaminhado</font></td></tr>	
  
          <tr><td	
  colspan=2>Encaminhado	
  para	
  CTCE	
  PORTO	
  VELHO	
  -­‐	
  PORTO	
  VELHO/RO</td></tr>	
  
          <tr><td	
  rowspan=1>18/04/2012	
  21:38</td><td>CTE	
  SAUDE/GCCAP	
  -­‐	
  SAO	
  PAULO/SP</td><td><FONT	
  COLOR="000000">Postado</font></td></tr>	
  
          <tr><td	
  rowspan=2>18/04/2012	
  19:11</td><td>CEE	
  MOEMA	
  -­‐	
  SAO	
  PAULO/SP</td><td><FONT	
  COLOR="000000">Encaminhado</font></td></tr>	
  
          <tr><td	
  colspan=2>Em	
  tr?nsito	
  para	
  CTE	
  SAUDE	
  -­‐	
  SAO	
  PAULO/SP</td></tr>	
  
          </TABLE>	
  




                                                                      Python	
  Aula	
  Extra	
  
  14
Construindo o Downloader	

Mas	
  precisamos	
  extrair	
  estas	
  linhas	
  	
  
          <table	
  	
  border	
  cellpadding=1	
  hspace=10>	
  
          <colgroup	
  style='font:8pt	
  Tahoma;color=Black'	
  valign=top><colgroup	
  style='font:8pt	
  Tahoma;	
  color=Navy'><colgroup	
  style='font:8pt	
  Tahoma;color=Maroon'>	
  
          	
  
          <tr>	
  
          <td><font	
  FACE=Tahoma	
  color='#CC0000'	
  size=2><b>Data</b></font></td>	
  
          <td><font	
  FACE=Tahoma	
  c	
  olor='#CC0000'	
  size=2><b>Local</b></font></td>	
  
          <td><font	
  FACE=Tahoma	
  c	
  olor='#CC0000'	
  size=2><b>Situa??o</b></font></td>	
  
          </tr>	
  
          <tr><td	
  rowspan=1>25/04/2012	
  17:36</td><td>CDD	
  CACOAL	
  -­‐	
  CACOAL/RO</td><td><FONT	
  
          COLOR="5F9F9F">Entrega	
  Efetuada</font></td></tr>	
  
          <tr><td	
  rowspan=1>25/04/2012	
  09:04</td><td>CDD	
  CACOAL	
  -­‐	
  CACOAL/RO</td><td><FONT	
  
          COLOR="007FFF">Saiu	
  para	
  entrega</font></td></tr>	
  
          <tr><td	
  rowspan=2>23/04/2012	
  12:46</td><td>CTCE	
  PORTO	
  VELHO	
  -­‐	
  PORTO	
  VELHO/RO</
          td><td><FONT	
  COLOR="000000">Encaminhado</font></td></tr>	
  
          <tr><td	
  colspan=2>Em	
  tr?nsito	
  para	
  CDD	
  CACOAL	
  -­‐	
  CACOAL/RO</td></tr>	
  
          <tr><td	
  rowspan=2>19/04/2012	
  14:55</td><td>CTE	
  SAUDE	
  -­‐	
  SAO	
  PAULO/SP</td><td><FONT	
  
          COLOR="000000">Encaminhado</font></td></tr>	
  
          <tr><td	
  colspan=2>Encaminhado	
  para	
  CTCE	
  PORTO	
  VELHO	
  -­‐	
  PORTO	
  VELHO/RO</td></tr>	
  
          <tr><td	
  rowspan=1>18/04/2012	
  21:38</td><td>CTE	
  SAUDE/GCCAP	
  -­‐	
  SAO	
  PAULO/SP</
          td><td><FONT	
  COLOR="000000">Postado</font></td></tr>	
  
          <tr><td	
  rowspan=2>18/04/2012	
  19:11</td><td>CEE	
  MOEMA	
  -­‐	
  SAO	
  PAULO/SP</td><td><FONT	
  
          COLOR="000000">Encaminhado</font></td></tr>	
  
          <tr><td	
  colspan=2>Em	
  tr?nsito	
  para	
  CTE	
  SAUDE	
  -­‐	
  SAO	
  PAULO/SP</td></tr>	
  
          </TABLE>	
                                                  Python	
  Aula	
  Extra	
  
  15
Construindo o Parser	

O	
  próximo	
  passo	
  é	
  construirmos	
  o	
  parser	
  que	
  irá	
  extrair	
  os	
  dados	
  
das	
  encomendas.	
  	
  Uma	
  boa	
  dica	
  é	
  ir	
  extraindo	
  por	
  partes	
  de	
  nossa	
  
tabela.	
  	
  




                                hmps://gist.github.com/2872517	
  
                                         Python	
  Aula	
  Extra	
  
   16
Construindo uma simples Storage - API	

Para	
  armazenamento	
  vamos	
  expor	
  o	
  status	
  da	
  nossa	
  encomenda	
  	
  
no	
  formato	
  JSON	
  para	
  ser	
  disponibilizada	
  por	
  exemplo	
  no	
  futuro	
  
em	
  uma	
  webservice!	
  
	
  




                                                             hmps://gist.github.com/2872533	
  

                                    Python	
  Aula	
  Extra	
  
  17
Construindo uma simples Storage - API	



 Resposta	
  do	
  script:	
  
 	
  
$	
  python	
  correios.py	
  PH058838637BR	
  
status	
  {"data":	
  "25/04/2012	
  17:36",	
  "local":	
  "CDD	
  CACOAL	
  -­‐	
  CACOAL/RO",	
  "situacao":	
  "Entrega	
  Efetuada"}	
  
	
  




                                                      Python	
  Aula	
  Extra	
  
       18
Extra: Webservice com Flask!	

Podemos	
  construir	
  rapidamente	
  um	
  simples	
  servidor	
  web	
  para	
  
servir	
  esta	
  mini	
  API	
  REST!	
  
	
                                         hmps://gist.github.com/2872583	
  




                                       hmp://127.0.0.1:5000/track/PH058838637BR	
  

          Flask	
  é	
  um	
  micro-­‐framework	
  web	
  e	
  pode	
  ser	
  baixado	
  em	
  :	
  	
  hFp://flask.pocoo.org/	
  	
  	
  	
  	
  	
  	
  

                                                                   Python	
  Aula	
  Extra	
  
  19
WebCrawlers com Python e Regex	

                  Marcel Pinheiro Caraciolo	

                   Python	
  Aula	
  Extra	
  
20

Mais conteúdo relacionado

Semelhante a WebCrawler Correios Python Regex

Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Skytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxySkytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxyFernando Ike
 
Python Brasil 2020 - Desmitificando pipeline de dados com Python: o que apren...
Python Brasil 2020 - Desmitificando pipeline de dados com Python: o que apren...Python Brasil 2020 - Desmitificando pipeline de dados com Python: o que apren...
Python Brasil 2020 - Desmitificando pipeline de dados com Python: o que apren...Affinitas GmbH
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Bruno Rocha
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyGilson Filho
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...BrunoSouza617
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologiaRômulo Jales
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)Rudá Moura
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Renato Groff
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsJulio Betta
 
Análise de Tráfego TCP/IP
Análise de Tráfego TCP/IPAnálise de Tráfego TCP/IP
Análise de Tráfego TCP/IPThiago Finardi
 

Semelhante a WebCrawler Correios Python Regex (20)

Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Skytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxySkytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxy
 
Python Brasil 2020 - Desmitificando pipeline de dados com Python: o que apren...
Python Brasil 2020 - Desmitificando pipeline de dados com Python: o que apren...Python Brasil 2020 - Desmitificando pipeline de dados com Python: o que apren...
Python Brasil 2020 - Desmitificando pipeline de dados com Python: o que apren...
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Cacti
CactiCacti
Cacti
 
Google apps script - Parte - 1
Google apps script - Parte - 1Google apps script - Parte - 1
Google apps script - Parte - 1
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Ntop
NtopNtop
Ntop
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
Análise de Tráfego TCP/IP
Análise de Tráfego TCP/IPAnálise de Tráfego TCP/IP
Análise de Tráfego TCP/IP
 

Mais de Marcel Caraciolo

Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Marcel Caraciolo
 
Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)Marcel Caraciolo
 
Opensource - Como começar e dá dinheiro ?
Opensource - Como começar e dá dinheiro ?Opensource - Como começar e dá dinheiro ?
Opensource - Como começar e dá dinheiro ?Marcel Caraciolo
 
Benchy, python framework for performance benchmarking of Python Scripts
Benchy, python framework for performance benchmarking  of Python ScriptsBenchy, python framework for performance benchmarking  of Python Scripts
Benchy, python framework for performance benchmarking of Python ScriptsMarcel Caraciolo
 
Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Marcel Caraciolo
 
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...Marcel Caraciolo
 
Benchy: Lightweight framework for Performance Benchmarks
Benchy: Lightweight framework for Performance Benchmarks Benchy: Lightweight framework for Performance Benchmarks
Benchy: Lightweight framework for Performance Benchmarks Marcel Caraciolo
 
Construindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonConstruindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonMarcel Caraciolo
 
Python, A pílula Azul da programação
Python, A pílula Azul da programaçãoPython, A pílula Azul da programação
Python, A pílula Azul da programaçãoMarcel Caraciolo
 
Construindo Soluções Científicas com Big Data & MapReduce
Construindo Soluções Científicas com Big Data & MapReduceConstruindo Soluções Científicas com Big Data & MapReduce
Construindo Soluções Científicas com Big Data & MapReduceMarcel Caraciolo
 
Como Python está mudando a forma de aprendizagem à distância no Brasil
Como Python está mudando a forma de aprendizagem à distância no BrasilComo Python está mudando a forma de aprendizagem à distância no Brasil
Como Python está mudando a forma de aprendizagem à distância no BrasilMarcel Caraciolo
 
Novas Tendências para a Educação a Distância: Como reinventar a educação ?
Novas Tendências para a Educação a Distância: Como reinventar a educação ?Novas Tendências para a Educação a Distância: Como reinventar a educação ?
Novas Tendências para a Educação a Distância: Como reinventar a educação ?Marcel Caraciolo
 
Arquivos Zip com Python - Aula PyCursos
Arquivos Zip com Python - Aula PyCursosArquivos Zip com Python - Aula PyCursos
Arquivos Zip com Python - Aula PyCursosMarcel Caraciolo
 
PyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for FoursquarePyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for FoursquareMarcel Caraciolo
 
Sistemas de Recomendação: Como funciona e Onde Se aplica?
Sistemas de Recomendação: Como funciona e Onde Se aplica?Sistemas de Recomendação: Como funciona e Onde Se aplica?
Sistemas de Recomendação: Como funciona e Onde Se aplica?Marcel Caraciolo
 
Recomendação de Conteúdo para Redes Sociais Educativas
Recomendação de Conteúdo para Redes Sociais EducativasRecomendação de Conteúdo para Redes Sociais Educativas
Recomendação de Conteúdo para Redes Sociais EducativasMarcel Caraciolo
 
Content Recommendation Based on Data Mining in Adaptive Social Networks
Content Recommendation Based on Data Mining  in Adaptive Social NetworksContent Recommendation Based on Data Mining  in Adaptive Social Networks
Content Recommendation Based on Data Mining in Adaptive Social NetworksMarcel Caraciolo
 
Crab: A Python Framework for Building Recommender Systems
Crab: A Python Framework for Building Recommender Systems Crab: A Python Framework for Building Recommender Systems
Crab: A Python Framework for Building Recommender Systems Marcel Caraciolo
 
Construindo Comunidades Open-Source Bem Sucedidas: Experiências do PUG-PE
Construindo Comunidades Open-Source Bem Sucedidas: Experiências do PUG-PEConstruindo Comunidades Open-Source Bem Sucedidas: Experiências do PUG-PE
Construindo Comunidades Open-Source Bem Sucedidas: Experiências do PUG-PEMarcel Caraciolo
 

Mais de Marcel Caraciolo (20)

Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3
 
Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)
 
Opensource - Como começar e dá dinheiro ?
Opensource - Como começar e dá dinheiro ?Opensource - Como começar e dá dinheiro ?
Opensource - Como começar e dá dinheiro ?
 
Big Data com Python
Big Data com PythonBig Data com Python
Big Data com Python
 
Benchy, python framework for performance benchmarking of Python Scripts
Benchy, python framework for performance benchmarking  of Python ScriptsBenchy, python framework for performance benchmarking  of Python Scripts
Benchy, python framework for performance benchmarking of Python Scripts
 
Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?
 
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
 
Benchy: Lightweight framework for Performance Benchmarks
Benchy: Lightweight framework for Performance Benchmarks Benchy: Lightweight framework for Performance Benchmarks
Benchy: Lightweight framework for Performance Benchmarks
 
Construindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonConstruindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com Python
 
Python, A pílula Azul da programação
Python, A pílula Azul da programaçãoPython, A pílula Azul da programação
Python, A pílula Azul da programação
 
Construindo Soluções Científicas com Big Data & MapReduce
Construindo Soluções Científicas com Big Data & MapReduceConstruindo Soluções Científicas com Big Data & MapReduce
Construindo Soluções Científicas com Big Data & MapReduce
 
Como Python está mudando a forma de aprendizagem à distância no Brasil
Como Python está mudando a forma de aprendizagem à distância no BrasilComo Python está mudando a forma de aprendizagem à distância no Brasil
Como Python está mudando a forma de aprendizagem à distância no Brasil
 
Novas Tendências para a Educação a Distância: Como reinventar a educação ?
Novas Tendências para a Educação a Distância: Como reinventar a educação ?Novas Tendências para a Educação a Distância: Como reinventar a educação ?
Novas Tendências para a Educação a Distância: Como reinventar a educação ?
 
Arquivos Zip com Python - Aula PyCursos
Arquivos Zip com Python - Aula PyCursosArquivos Zip com Python - Aula PyCursos
Arquivos Zip com Python - Aula PyCursos
 
PyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for FoursquarePyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for Foursquare
 
Sistemas de Recomendação: Como funciona e Onde Se aplica?
Sistemas de Recomendação: Como funciona e Onde Se aplica?Sistemas de Recomendação: Como funciona e Onde Se aplica?
Sistemas de Recomendação: Como funciona e Onde Se aplica?
 
Recomendação de Conteúdo para Redes Sociais Educativas
Recomendação de Conteúdo para Redes Sociais EducativasRecomendação de Conteúdo para Redes Sociais Educativas
Recomendação de Conteúdo para Redes Sociais Educativas
 
Content Recommendation Based on Data Mining in Adaptive Social Networks
Content Recommendation Based on Data Mining  in Adaptive Social NetworksContent Recommendation Based on Data Mining  in Adaptive Social Networks
Content Recommendation Based on Data Mining in Adaptive Social Networks
 
Crab: A Python Framework for Building Recommender Systems
Crab: A Python Framework for Building Recommender Systems Crab: A Python Framework for Building Recommender Systems
Crab: A Python Framework for Building Recommender Systems
 
Construindo Comunidades Open-Source Bem Sucedidas: Experiências do PUG-PE
Construindo Comunidades Open-Source Bem Sucedidas: Experiências do PUG-PEConstruindo Comunidades Open-Source Bem Sucedidas: Experiências do PUG-PE
Construindo Comunidades Open-Source Bem Sucedidas: Experiências do PUG-PE
 

WebCrawler Correios Python Regex

  • 1. WebCrawlers com Python e Regex Marcel Pinheiro Caraciolo Python  Aula  Extra   1
  • 2.     O que são webcrawlers ? WebCrawlers  são  programas  de  computador  que  percorrem  a   internet  de  forma  automa>zada  e  metódica.    Também  chamados   de  bots  ou  spiders,  são  muito  u>lizados  em  sites  de  busca  como   Google  para  indexar  as  páginas  web  em  sua  base  de  dados.   Arquitetura  de  um  WebCrawler   Python  Aula  Extra   2
  • 3. O que são expressões regulares ? Chamado  também  de  regex  ou  regexp   Ferramenta  eficiente  para  processamento  de  palavras  em  texto   por  meio  de  casamento  de  padrões   Linguagem  formal  que  pode  ser  interpretada  por  um   processador  de  expressões  regulares  ou  por  um  programa  que   iden>fica  partes  do  texto  que  “casam”  com  uma  especificação   provida.  -­‐  Wikipedia   Python  Aula  Extra   3
  • 4. O que são expressões regulares ? Também  podemos  afirmar  que  é:     •  Uma  maneira  de  procurar  um  texto  que  você  não   lembra  exatamente  como  é,  mas  tem  ideia  das   variações  possíveis;     •  Uma  maneira  de  procurar  um  trecho  em  posições   específicas  como  no  começo  ou  no  fim  de  uma  linha,   ou  palavra;     •  Uma  maneira  de  um  programador  especificar   padrões  complexos  que  podem  ser  procurados  e   casados  em  uma  cadeia  de  caracteres;     Python  Aula  Extra   4
  • 5. Expressões Regulares Representação formal de um autômato finito, com o objetivo de determinar um padrão de texto. ^[0-9]+. [0-9]*|. [0-9]+$ Leitura atômica da esquerda para a direita Python  Aula  Extra   5
  • 6. Onde são aplicados ? Busca  ou  validação  de  um  padrão  de  texto  que  pode  ser   variável  como  datas,  horários,  números  IP,  endereços,  dados   de  uma  coluna  N  de  texto,  dados  que  estão  entre  tags,  RG,  CPF,   cartão  de  crédito,  etc.   Como  achar  apenas  os  usuários  que                    05:15    ernesto   acessaram  o  sistema    08:39    ricardo   No  período  da  tarde  (meio-­‐dia  às  6)  ?    10:32    patricia    14:59    gabriel   Resposta:  ^1[2-­‐8]    16:27    carla    22:23    marcelo   Python  Aula  Extra   6
  • 7. Construindo um Crawler - Correios Os  Correios  brasileiro  possui  um  website  que  provê  o   rastreamento  de  encomendas  via  sedex,  carta  registrada,  pac,  etc.     Este  site  é  gratuito  e  informa  o  status  atual  da  encomenda,  isto  é,   se  já  foi  entregue,  se  já  foi  enviado  e  por  qual  localidade  ou   agência  se  encontra.   Python  Aula  Extra   7
  • 8. Nesta aula aprenderemos Como  podemos  construir  um  simples  webcrawler  usando   expressões  regulares  para  rastreamento  de  encomendas  usando   Python.     Python  Aula  Extra   8
  • 9. Disclaimer!! Esta  aula  tem  como  obje>vo  apenas   fins  didá>cos  a  construção  deste  crawler;     De   hipotése   alguma   incen>vamos   o   uso   indevido  ou  PAGO  desta  ferramenta.  Os  dados   são  públicos!!!     N ã o   n o s   r e s p o n s a b i l i z a m o s   p e l o   u s o   inapropriado   deste   crawler.     Recomendo   inclusive   u>lizar   as   ferramentas   fornecidas   pelo   site  oficial  dos  correios  brasileiros;         Python  Aula  Extra   9
  • 10. Construindo o Downloader O  Primeiro  passo  é  construir  o  mecanismo  de  fazer  o  download  do   resultado  dos  correios  após  a  consulta  do  código  de  rastreamento   como  parâmetro.         hmps://gist.github.com/2866283   Python  Aula  Extra   10
  • 11. Construindo o Downloader Adicionando  a  extração  do  html  por  meio  do  módulo  urllib  em   python.       hmps://gist.github.com/2866483   Python  Aula  Extra   11
  • 12. Construindo o Downloader Resultado  da  primeira  etapa:   <table    border  cellpadding=1  hspace=10>   <colgroup  style='font:8pt  Tahoma;color=Black'  valign=top><colgroup  style='font:8pt  Tahoma;  color=Navy'><colgroup  style='font:8pt  Tahoma;color=Maroon'>     <tr>   <td><font  FACE=Tahoma  color='#CC0000'  size=2><b>Data</b></font></td>   <td><font  FACE=Tahoma  c  olor='#CC0000'  size=2><b>Local</b></font></td>   <td><font  FACE=Tahoma  c  olor='#CC0000'  size=2><b>Situa??o</b></font></td>   </tr>   <tr><td  rowspan=1>25/04/2012  17:36</td><td>CDD  CACOAL  -­‐  CACOAL/RO</td><td><FONT  COLOR="5F9F9F">Entrega  Efetuada</font></td></tr>   <tr><td  rowspan=1>25/04/2012  09:04</td><td>CDD  CACOAL  -­‐  CACOAL/RO</td><td><FONT  COLOR="007FFF">Saiu  para  entrega</font></td></tr>   <tr><td  rowspan=2>23/04/2012  12:46</td><td>CTCE  PORTO  VELHO  -­‐  PORTO  VELHO/RO</td><td><FONT  COLOR="000000">Encaminhado</font></td></tr>   <tr><td  colspan=2>Em  tr?nsito  para  CDD  CACOAL  -­‐  CACOAL/RO</td></tr>   <tr><td  rowspan=2>19/04/2012  14:55</td><td>CTE  SAUDE  -­‐  SAO  PAULO/SP</td><td><FONT  COLOR="000000">Encaminhado</font></td></tr>   <tr><td  colspan=2>Encaminhado  para  CTCE  PORTO  VELHO  -­‐  PORTO  VELHO/RO</td></tr>   <tr><td  rowspan=1>18/04/2012  21:38</td><td>CTE  SAUDE/GCCAP  -­‐  SAO  PAULO/SP</td><td><FONT  COLOR="000000">Postado</font></td></tr>   <tr><td  rowspan=2>18/04/2012  19:11</td><td>CEE  MOEMA  -­‐  SAO  PAULO/SP</td><td><FONT  COLOR="000000">Encaminhado</font></td></tr>   <tr><td  colspan=2>Em  tr?nsito  para  CTE  SAUDE  -­‐  SAO  PAULO/SP</td></tr>   </TABLE>   Python  Aula  Extra   12
  • 13. Construindo o Downloader O  Módulo  re  permite  a  construção  de  expressões  regulares.  O   nosso  obje>vo  é  extrair  a  tabela  com  os  status  das  encomendas.       Retorna  tudo  entre  as  tags   <table>  </TABLE>   hmps://gist.github.com/2872334   Python  Aula  Extra   13
  • 14. Construindo o Downloader Resultado  da  segunda  etapa:   <table    border  cellpadding=1  hspace=10>   <colgroup  style='font:8pt  Tahoma;color=Black'  valign=top><colgroup  style='font:8pt  Tahoma;  color=Navy'><colgroup  style='font:8pt  Tahoma;color=Maroon'>     <tr>   <td><font  FACE=Tahoma  color='#CC0000'  size=2><b>Data</b></font></td>   <td><font  FACE=Tahoma  c  olor='#CC0000'  size=2><b>Local</b></font></td>   <td><font  FACE=Tahoma  c  olor='#CC0000'  size=2><b>Situa??o</b></font></td>   </tr>   <tr><td  rowspan=1>25/04/2012  17:36</td><td>CDD  CACOAL  -­‐  CACOAL/RO</td><td><FONT  COLOR="5F9F9F">Entrega  Efetuada</font></td></tr>   <tr><td  rowspan=1>25/04/2012  09:04</td><td>CDD  CACOAL  -­‐  CACOAL/RO</td><td><FONT  COLOR="007FFF">Saiu  para  entrega</font></td></tr>   <tr><td  rowspan=2>23/04/2012  12:46</td><td>CTCE  PORTO  VELHO  -­‐  PORTO  VELHO/RO</td><td><FONT  COLOR="000000">Encaminhado</font></td></tr>   <tr><td  colspan=2>Em  tr?nsito  para  CDD  CACOAL  -­‐  CACOAL/RO</td></tr>   <tr><td  rowspan=2>19/04/2012  14:55</td><td>CTE  SAUDE  -­‐  SAO  PAULO/SP</td><td><FONT  COLOR="000000">Encaminhado</font></td></tr>   <tr><td  colspan=2>Encaminhado  para  CTCE  PORTO  VELHO  -­‐  PORTO  VELHO/RO</td></tr>   <tr><td  rowspan=1>18/04/2012  21:38</td><td>CTE  SAUDE/GCCAP  -­‐  SAO  PAULO/SP</td><td><FONT  COLOR="000000">Postado</font></td></tr>   <tr><td  rowspan=2>18/04/2012  19:11</td><td>CEE  MOEMA  -­‐  SAO  PAULO/SP</td><td><FONT  COLOR="000000">Encaminhado</font></td></tr>   <tr><td  colspan=2>Em  tr?nsito  para  CTE  SAUDE  -­‐  SAO  PAULO/SP</td></tr>   </TABLE>   Python  Aula  Extra   14
  • 15. Construindo o Downloader Mas  precisamos  extrair  estas  linhas     <table    border  cellpadding=1  hspace=10>   <colgroup  style='font:8pt  Tahoma;color=Black'  valign=top><colgroup  style='font:8pt  Tahoma;  color=Navy'><colgroup  style='font:8pt  Tahoma;color=Maroon'>     <tr>   <td><font  FACE=Tahoma  color='#CC0000'  size=2><b>Data</b></font></td>   <td><font  FACE=Tahoma  c  olor='#CC0000'  size=2><b>Local</b></font></td>   <td><font  FACE=Tahoma  c  olor='#CC0000'  size=2><b>Situa??o</b></font></td>   </tr>   <tr><td  rowspan=1>25/04/2012  17:36</td><td>CDD  CACOAL  -­‐  CACOAL/RO</td><td><FONT   COLOR="5F9F9F">Entrega  Efetuada</font></td></tr>   <tr><td  rowspan=1>25/04/2012  09:04</td><td>CDD  CACOAL  -­‐  CACOAL/RO</td><td><FONT   COLOR="007FFF">Saiu  para  entrega</font></td></tr>   <tr><td  rowspan=2>23/04/2012  12:46</td><td>CTCE  PORTO  VELHO  -­‐  PORTO  VELHO/RO</ td><td><FONT  COLOR="000000">Encaminhado</font></td></tr>   <tr><td  colspan=2>Em  tr?nsito  para  CDD  CACOAL  -­‐  CACOAL/RO</td></tr>   <tr><td  rowspan=2>19/04/2012  14:55</td><td>CTE  SAUDE  -­‐  SAO  PAULO/SP</td><td><FONT   COLOR="000000">Encaminhado</font></td></tr>   <tr><td  colspan=2>Encaminhado  para  CTCE  PORTO  VELHO  -­‐  PORTO  VELHO/RO</td></tr>   <tr><td  rowspan=1>18/04/2012  21:38</td><td>CTE  SAUDE/GCCAP  -­‐  SAO  PAULO/SP</ td><td><FONT  COLOR="000000">Postado</font></td></tr>   <tr><td  rowspan=2>18/04/2012  19:11</td><td>CEE  MOEMA  -­‐  SAO  PAULO/SP</td><td><FONT   COLOR="000000">Encaminhado</font></td></tr>   <tr><td  colspan=2>Em  tr?nsito  para  CTE  SAUDE  -­‐  SAO  PAULO/SP</td></tr>   </TABLE>   Python  Aula  Extra   15
  • 16. Construindo o Parser O  próximo  passo  é  construirmos  o  parser  que  irá  extrair  os  dados   das  encomendas.    Uma  boa  dica  é  ir  extraindo  por  partes  de  nossa   tabela.     hmps://gist.github.com/2872517   Python  Aula  Extra   16
  • 17. Construindo uma simples Storage - API Para  armazenamento  vamos  expor  o  status  da  nossa  encomenda     no  formato  JSON  para  ser  disponibilizada  por  exemplo  no  futuro   em  uma  webservice!     hmps://gist.github.com/2872533   Python  Aula  Extra   17
  • 18. Construindo uma simples Storage - API Resposta  do  script:     $  python  correios.py  PH058838637BR   status  {"data":  "25/04/2012  17:36",  "local":  "CDD  CACOAL  -­‐  CACOAL/RO",  "situacao":  "Entrega  Efetuada"}     Python  Aula  Extra   18
  • 19. Extra: Webservice com Flask! Podemos  construir  rapidamente  um  simples  servidor  web  para   servir  esta  mini  API  REST!     hmps://gist.github.com/2872583   hmp://127.0.0.1:5000/track/PH058838637BR   Flask  é  um  micro-­‐framework  web  e  pode  ser  baixado  em  :    hFp://flask.pocoo.org/               Python  Aula  Extra   19
  • 20. WebCrawlers com Python e Regex Marcel Pinheiro Caraciolo Python  Aula  Extra   20