Aula WebCrawlers com Regex - PyCursos
-
Upload
marcel-caraciolo -
Category
Technology
-
view
2.837 -
download
2
description
Transcript of Aula WebCrawlers com Regex - PyCursos
1
WebCrawlers com Python e Regex
Marcel Pinheiro Caraciolo Python Aula Extra
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
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
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
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
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]
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
8
Nesta aula aprenderemos
Como podemos construir um simples webcrawler usando expressões regulares para rastreamento de encomendas usando Python.
Python Aula Extra
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;
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
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
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>
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>
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>
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>
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
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
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:
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/
20
WebCrawlers com Python e Regex
Marcel Pinheiro Caraciolo Python Aula Extra