Aula WebCrawlers com Regex - PyCursos

20
1 WebCrawlers com Python e Regex Marcel Pinheiro Caraciolo Python Aula Extra

description

Aula sobre construção de webcrawlers utilizando expressões regulares e PythonInstrutor: Marcel CaracioloMais informações sobre o restante do curso em:http://www.pycursos.com/regex

Transcript of Aula WebCrawlers com Regex - PyCursos

Page 1: Aula WebCrawlers com Regex - PyCursos

1

WebCrawlers com Python e Regex

Marcel Pinheiro Caraciolo Python  Aula  Extra  

Page 2: Aula WebCrawlers com Regex - PyCursos

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.  

Python  Aula  Extra  

Arquitetura  de  um  WebCrawler  

Page 3: Aula WebCrawlers com Regex - PyCursos

3

O que são expressões regulares ?

Python  Aula  Extra  

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  

Page 4: Aula WebCrawlers com Regex - PyCursos

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  

Page 5: Aula WebCrawlers com Regex - PyCursos

5

Expressões Regulares

^[0-9]+\. [0-9]*|\. [0-9]+$

Leitura atômica da esquerda para a direita

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

Python  Aula  Extra  

Page 6: Aula WebCrawlers com Regex - PyCursos

6

Onde são aplicados ?

Python  Aula  Extra  

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.  

                 05:15    ernesto    08:39    ricardo    10:32    patricia    14:59    gabriel    16:27    carla    22:23    marcelo  

Como  achar  apenas  os  usuários  que  acessaram  o  sistema  No  período  da  tarde  (meio-­‐dia  às  6)  ?  

Resposta:  ^1[2-­‐8]  

Page 7: Aula WebCrawlers com Regex - PyCursos

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  

Page 8: Aula WebCrawlers com Regex - PyCursos

8

Nesta aula aprenderemos

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

Python  Aula  Extra  

Page 9: Aula WebCrawlers com Regex - PyCursos

9

Disclaimer!!

Python  Aula  Extra  

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   nos   responsabi l i zamos   pelo   uso  inapropriado   deste   crawler.     Recomendo  inclusive  u>lizar  as  ferramentas  fornecidas  pelo  site  oficial  dos  correios  brasileiros;        

Page 10: Aula WebCrawlers com Regex - PyCursos

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.    

Python  Aula  Extra  

   

hmps://gist.github.com/2866283  

Page 11: Aula WebCrawlers com Regex - PyCursos

11

Construindo o Downloader

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

Python  Aula  Extra  

   

hmps://gist.github.com/2866483  

Page 12: Aula WebCrawlers com Regex - PyCursos

12

Construindo o Downloader

Resultado  da  primeira  etapa:  

Python  Aula  Extra  

   

<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  color='#CC0000'  size=2><b>Local</b></font></td>  <td><font  FACE=Tahoma  color='#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>  

Page 13: Aula WebCrawlers com Regex - PyCursos

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.  

Python  Aula  Extra  

   

hmps://gist.github.com/2872334  

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

Page 14: Aula WebCrawlers com Regex - PyCursos

14

Construindo o Downloader

Resultado  da  segunda  etapa:  

Python  Aula  Extra  

   

<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  color='#CC0000'  size=2><b>Local</b></font></td>  <td><font  FACE=Tahoma  color='#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>  

Page 15: Aula WebCrawlers com Regex - PyCursos

15

Construindo o Downloader

Mas  precisamos  extrair  estas  linhas    

Python  Aula  Extra  

   

<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  color='#CC0000'  size=2><b>Local</b></font></td>  <td><font  FACE=Tahoma  color='#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>  

Page 16: Aula WebCrawlers com Regex - PyCursos

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.    

Python  Aula  Extra  

hmps://gist.github.com/2872517  

Page 17: Aula WebCrawlers com Regex - PyCursos

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!    

Python  Aula  Extra  

hmps://gist.github.com/2872533  

Page 18: Aula WebCrawlers com Regex - PyCursos

18

Construindo uma simples Storage - API

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

 

Python  Aula  Extra  

Resposta  do  script:    

Page 19: Aula WebCrawlers com Regex - PyCursos

19

Extra: Webservice com Flask! Podemos  construir  rapidamente  um  simples  servidor  web  para  servir  esta  mini  API  REST!    

Python  Aula  Extra  

hmp://127.0.0.1:5000/track/PH058838637BR  

hmps://gist.github.com/2872583  

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

Page 20: Aula WebCrawlers com Regex - PyCursos

20

WebCrawlers com Python e Regex

Marcel Pinheiro Caraciolo Python  Aula  Extra