[Estudo da Madruga] — Desenvolvendo um Scraping com Python e Elasticsearch — Parte 3/3
Na última parte deste post, iremos fazer uma pequena introdução aos conceitos do Elasticsearch, sendo: configurar o Scrapy para gravar os nossos dados, realizar alguns tratamento de dados e aprender sobre alguns parâmetros úteis para o nosso dia a dia.
Elasticsearch
Desenvolvido por Shay Banon, em 2010, o Elasticsearch é uma ferramenta de busca de texto e analise open-source altamente escalável baseado no Apache Lucene, considerado também uma solução NoSQL de armazenamento de dados. Ou seja, ele não segue os padrões de um banco de dados relacional, como por exemplo o MySql. Permite você armazenar, buscar e analisar grandes volumes de dados rapidamente, quase em real-time. Atualmente é utilizado por grandes empresas como Google, Netflix, Facebook, GitHub e Microsoft.
Apache Lucene
O Apache Lucene é um motor de busca open-source desenvolvido em Java, basta você importar as libs e começar a usar. Simples não é? #sqn! Este é um dos problemas do Lucene, gerando muito trabalho para integrá-lo com outras aplicações, pois você precisa obrigatoriamente usar o Java, outro ponto, é que o Lucene não diferencia tipos de dados (date, int, double), tudo pra ele é texto. Porém, o Lucene exerce algumas funções perfeitamente, por exemplo, ele é muito bom em administrar os arquivos em disco, dados em cache e “bufferização”.
Aproveitando as coisas boa do Lucene, Shay Banon criou o Elasticsearch, que através de uma API REST, pode se comunicar com qualquer linguagem que faça requisição HTTP, facilitando muito a integração com outras aplicações. Não é lindo isso? #obrigadoShayBanon.
Se familiarizando com alguns termos
Quem já trabalha com banco de dados relacional, terá um pouco de dificuldade em entender como um banco NoSql funciona(eu tive rsrsr). Para facilitar montei essa tabela fazendo uma comparação com alguns termos do Elastic e o Sql Server.
Instalação em 3 passos
Como disse no começo deste post, vou fazer a introdução de alguns conceitos do Elasticsearch, pois tem muita coisa a ser falado sobre ele e, o objetivo aqui é entender o básico para que você consiga integrar o Scrapy com o Elasticsearch sem problemas.
Em um futuro próximo farei um post falando somente sobre o Elasticsearch. Prometo!
Ok! Chega de enrolação e vamos colocar a mão na massa.
1º Passo
Vamos fazer o download do Elasticsearch. Acesse o link abaixo e faça o download conforme o seu sistema operacional.
https://www.elastic.co/downloads/elasticsearch
2º Passo
Extrair os arquivos em alguma pasta de fácil acesso.
3º Passo
Execute o arquivo “bin/elasticsearch” (ou bin\elasticsearch.bat no Windows), ao fazer isso, ele iniciará o servidor do Elasticsearch.
Para acessa-lo digite no seu browser o link
Se tudo ocorreu bem você receberá como resposta um JSON.
Configurando Elastic no Scrapy
Agora que já iniciamos o servidor do Elasticsearch, precisamos configurá-lo dentro do nosso projeto para armazenar os dados extraídos pelo web scraping.
O primeiro arquivos que vamos alterar é o “settings.py”
Você deve estar se perguntando que diabos é esse PIPELINES? Eu explico!
Após um item ser coletado pelo web scraping ele é enviado para o Item Pipeline que fica dentro do arquivo pipelines.py. O Item Pipeline nada mais é que uma classe que implementa alguns métodos. É nesta parte do projeto que fazemos;
- Limpeza dos dados.
- Algumas validações, por exemplo, valores duplicado.
- Gravar os dados no banco de dados.
Veja como ficará nosso arquivo “pipelines.py”
Nesse pequeno código estamos removendo os itens extraídos, onde o conteúdo esteja vazio, para isso utilizamos a classe DropItem do próprio Scrapy.
Estamos fazendo este tratamento, pois queremos armazenar somente as notícias com conteúdo válido.
Lembra que incluímos esta classe no arquivo “settings.py”.
A numeração no final de cada classe indica a ordem que o Scrapy irá executar cada classe. Primeiro ele verifica se o item extraído tem um conteúdo válido, conforme implementado no método “process_item” da classe ‘PrimeiroscrapyPipeline’, depois ele grava os dados no Elastic utilizando a biblioteca ‘scrapyelasticsearch’, aquela que instalamos no primeiro post.
Veja o primeiro post clicando aqui
Quase pronto
Antes de executar, precisamos fazer uma configuração importante em nosso web scraping.
Habilitando este parâmetro estamos falando para o Scrapy acessar uma página a cada 1 segundo, evitando acessos simultâneos ao servidor(no nosso caso o servidor do G1). É obvio que habilitando esse parâmetro nosso web scraping ficará um pouco lento, mas isso evitará o bloqueio do nosso IP pelo servidor do G1.
GO! GO! GO!
Chegou a hora de executar nosso web scraping. Para isso acesse o Terminal ou Command se estiver usando Windows, navegue até a pasta do projeto e digite;
Se tudo estiver certo, você verá algo parecido com isso.
Para verificar os dados armazenados no Elastic, você pode digitar no browser o seguinte link.
- “target” nosso Index
- “noticias” nosso doctype
- “_search” é um comando do Elastic para buscar os dados. Se estivéssemos usando um banco de dados relacional, seria mais ou menos como um “select * from noticias”
The End
Com isso finalizamos a terceira e última parte do primeiro post da série [Estudos da Madruga]. Espero ter contribuído de alguma forma para o seu estudo ou trabalho. Muito obrigado e até a próxima.
Veja o primeiro post clicando aqui
Veja o segundo post clicando aqui